确定。所以我以为我完全理解了这一点,但是我已经做了一些错误的事情,而且我不能为我的生活理解什么。我已经按照教程写了这封信(我查了一下),但是无法让它工作,所以在这里,让我问一个简单的问题。
我已经创建了一个基于QObject的类,它有一个简单的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;
};
使用以下函数注册:qmlRegisterType(“ITI_UI”,1,0,“CategoryPane”);
我正在尝试在QML文件中打印出我的CategoryPane类的name变量,如下所示:
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:无法分配给不存在的默认属性
注意:如果我删除了Text {}字段,我没有收到任何错误信息,但是我再也无法打印出我的名字字符串,这就是重点......
提前感谢您的时间和耐心!
答案 0 :(得分:8)
CategoryPane像一个可视项目一样使用,但它派生自QObject。您是否尝试过继承QDeclarativeItem?
如果您只是想访问该属性而不是将其用作可视项目,您应该能够这样做:
<强> C ++:强>
QDeclarativeView view;
CategoryPane pane;
view.rootContext()->setContextProperty("categoryPane", &pane);
<强> QML:强>
import QtQuick 1.0
Rectangle {
width: 300
height: 300
Text {
text: categoryPane.catName
}
}