QML如何访问C++的属性
时间: 2024-04-30 20:23:27 浏览: 78
在QML中访问C++对象的属性,需要在C++中定义一个QObject-derived类,并将其注册到QML中。在QML中,可以使用其属性和方法。下面是一个简单的例子:
C++代码:
```cpp
class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
public:
MyObject(QObject *parent = nullptr) : QObject(parent), m_name("default") {}
QString name() const { return m_name; }
void setName(const QString &name) {
if (name != m_name) {
m_name = name;
emit nameChanged();
}
}
signals:
void nameChanged();
private:
QString m_name;
};
```
在main函数中注册:
```cpp
#include <QtQml>
#include "myobject.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<MyObject>("MyObject", 1, 0, "MyObject");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
```
在QML中使用:
```qml
import QtQuick 2.0
import MyObject 1.0
Rectangle {
width: 200
height: 200
MyObject {
id: myObj
name: "Hello World"
}
Text {
text: myObj.name
}
MouseArea {
anchors.fill: parent
onClicked: myObj.name = "New Name"
}
}
```
在上面的例子中,我们定义了一个名为MyObject的QObject-derived类,并将其注册到QML中。在QML中,我们可以声明一个MyObject实例,并访问其name属性。我们还添加了一个MouseArea,用于演示如何在QML中更改C++对象的属性。
阅读全文