C++和QML集成,似乎无法访问属性
问题描述:
好的。所以我认为我已经完全理解了这一点,但是我有些做错了,我不能理解我的生活。我已经按照教程(我检查了)的信件,但不能得到它的工作,所以在这里,让我问一个简单的问题。C++和QML集成,似乎无法访问属性
我已经创建了具有存储类的名称(这只是用于测试)一个简单的QString变量一个QObject基于类,它看起来像这样:
#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”);
而且我想打印出我CategoryPane类的名称变量的QML文件看起来像这样:
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);
QML:
import QtQuick 1.0
Rectangle {
width: 300
height: 300
Text {
text: categoryPane.catName
}
}
我在昨天晚上问了一大堆问题,问了两个小时后,我不得不从QDeclarativeItem继承:) Did不知道关于rootContext()方法,谢谢! –