日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QML笔记-整合C++及单例模式管理QML中控件

發布時間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_H

QML進行注冊:

對應的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_H

Qml使用

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中控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。