一、C++中调用qml
1、首先在qml中编写这样一段测试代码
Rectangle{ //矩形框关键字
width: 200
height: 200
border.color: "black"
Text {
id: text1 //id唯一
objectName: "text1" //必须添加,C++用这个名字来定位(可能说的不太准确)
text: qsTr("123") //我们要在C++中修改这里的内容
font.pixelSize: 50
anchors.centerIn: parent //让字体在矩形框中居中显示
}
anchors.centerIn: parent //让矩形框在窗口中居中显示
}
2、我们新建一个C++的类,必须继承于object,类的名称必须大写!要不然在qml中查不到
3、在 main.cpp文件中 添加如下内容(有备注的是要添加的,没有备注的是新建文件自带的)
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "hello.h" //包含头文件
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
Hello h; //这里是要添加的内容
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
h.setProotobject(engine.rootObjects().first());//这里必须添加,必须添加在这里或以下,要不然不起作用
if (engine.rootObjects().isEmpty())
return -1;
h.setX(); //这个函数是修改qml中的内容,具体执行过程在hello.cpp中定义
return app.exec();
}
4、在新建c++文件中的h文件中添加如下内容(有备注的是要添加的,没有备注的是新建文件自带的)
#ifndef HELLO_H
#define HELLO_H
#include <QObject>
#include <QVariant> //必须要包含的头文件,要不然编译时报错
class Hello : public QObject
{
Q_OBJECT
public:
explicit Hello(QObject *parent = nullptr);
void setX(); //自定义一个函数
QObject *prootobject() const; //必须添加
void setProotobject(QObject *prootobject); //必须添加
signals:
private:
QObject* m_prootobject = nullptr; //定义一个object,并赋值,C++11中可以直接在h文件中进行赋值
public slots:
};
#endif // HELLO_H
5、在新建的cpp文件中添加如下内容
#include "hello.h"
Hello::Hello(QObject *parent) : QObject(parent)
{
}
QObject *Hello::prootobject() const
{
return m_prootobject;
}
void Hello::setProotobject(QObject *prootobject)
{
m_prootobject = prootobject;
}
void Hello::setX() //这里就是该函数的具体实现过程
{
QObject *pText = m_prootobject->findChild<QObject*>("text1");
pText->setProperty("text","hello qml"); //定位该元素并修改,如果没有包含4中的头文件这里会报错
}
6、运行结果