这里两个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_OBJECT
Q_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.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
BackEnd{
id: backend
}
TextField{
text: backend.userName
placeholderText: "user name"
anchors.centerIn: parent
onTextChanged: backend.userName = text
}
}
源码下载地址如下:
https://github.com/fengfanchen/Qt/tree/master/IntegrateCPP%26QML