Qt C++;和QML集成,can';我似乎无法访问属性
嗯。所以我以为我已经完全明白了这一点,但很明显我做错了什么,我一辈子都不明白是什么。我严格按照教程(我检查过)进行操作,但无法使其正常工作,所以在这里,让我问一个简单的问题 我创建了一个基于QObject的类,它有一个简单的QString变量,用于存储类的名称(这只是为了测试),它看起来如下所示:Qt C++;和QML集成,can';我似乎无法访问属性,qt,qml,Qt,Qml,嗯。所以我以为我已经完全明白了这一点,但很明显我做错了什么,我一辈子都不明白是什么。我严格按照教程(我检查过)进行操作,但无法使其正常工作,所以在这里,让我问一个简单的问题 我创建了一个基于QObject的类,它有一个简单的QString变量,用于存储类的名称(这只是为了测试),它看起来如下所示: #include <QObject> class CategoryPane : public QObject { Q_OBJECT Q_PROPERTY(QString
#include <QObject>
class CategoryPane : public QObject
{
Q_OBJECT
Q_PROPERTY(QString catName READ getCategoryName WRITE setCategoryName);
public:
explicit CategoryPane(QObject *parent = 0);
QString getCategoryName();
void setCategoryName(QString);
signals:
void nameChange();
private:
QString categoryName;
};
import QtQuick 1.0
import ITI_UI 1.0
Rectangle {
width: 300
height: 300
CategoryPane {
id: whatever
catName: "ey"
Text {
text: whatever.catName
}
}
}
但我得到以下错误:qrc:/main.qml:11:3:无法分配给不存在的默认属性
注意:如果我删除文本{}字段,我不会得到错误消息,但是我无法打印出我的名称字符串,这就是整点
提前感谢您的时间和耐心 CategoryPane被用作可视项目,但它源自QObject。您是否尝试过从QDeclarativeItem继承 如果您只想访问该属性,而不想将其用作可视项,则应能够执行以下操作: C++:
QDeclarativeView view;
CategoryPane pane;
view.rootContext()->setContextProperty("categoryPane", &pane);
import QtQuick 1.0
Rectangle {
width: 300
height: 300
Text {
text: categoryPane.catName
}
}
QML:
QDeclarativeView view;
CategoryPane pane;
view.rootContext()->setContextProperty("categoryPane", &pane);
import QtQuick 1.0
Rectangle {
width: 300
height: 300
Text {
text: categoryPane.catName
}
}
昨晚,在问了这个问题大约两个小时后,我发现我必须继承QDeclarativeItem:)但我不知道rootContext()方法,谢谢!