QML笔记-整合C++及单例模式管理QML中控件
生活随笔
收集整理的這篇文章主要介紹了
QML笔记-整合C++及单例模式管理QML中控件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里兩個Integrate標題的界面是widgets界面,Hello?World標題的界面是QML界面
?
程序運行截圖如下:
點擊獲取QML中的值后:
點擊設置QML中的值后
這里關閉窗口,整合的C++類也會自動析構(Qt真是強大)
目前官網給出的要整合C++的,需要Qt5.7以上的版本。
使用Q_PROPERTY宏可以被QML控件直接讀取,訪問
如下:
?
這個setUserName函數里面發出userNameChanged信號,這個型號被QML的onUsername Changed?
?
?
這里使用了ItemManager類管理qml界面的控件:
#ifndef ITEMMANAGER_H #define ITEMMANAGER_H#include <QObject> #include <QList>class ItemManager : public QObject {Q_OBJECT public:void addItem(QObject *item);QObject *getObject();void printTest();~ItemManager();static ItemManager *getInstance();protected:explicit ItemManager(QObject *parent = nullptr);ItemManager();ItemManager(ItemManager &item);private:QList<QObject*> m_item;static ItemManager *m_instance;};#endif // ITEMMANAGER_HQML進行注冊:
對應的C++類
#ifndef BACKEND_H #define BACKEND_H#include <QObject>class BackEnd : public QObject {Q_OBJECTQ_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged)public:explicit BackEnd(QObject *parent = nullptr);~BackEnd();QString userName();void setUserName(const QString &userName);signals:void userNameChanged();private:QString m_userName;};#endif // BACKEND_HQml使用
import QtQuick 2.6 import QtQuick.Window 2.14 import QtQuick.Controls 2.2 import cn.it1995.bakend 1.0Window {visible: truewidth: 640height: 480title: qsTr("Hello World")BackEnd{id: backend}TextField{text: backend.userNameplaceholderText: "user name"anchors.centerIn: parentonTextChanged: backend.userName = text}}源碼下載地址如下:
https://github.com/fengfanchen/Qt/tree/master/IntegrateCPP%26QML
總結
以上是生活随笔為你收集整理的QML笔记-整合C++及单例模式管理QML中控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反汇编基础-MSVC2012,2008,
- 下一篇: Arduino笔记-有源蜂鸣器结合开关(