C ++和QML集成,似乎无法访问属性

时间:2011-09-29 20:50:57

标签: qt qml

确定。所以我以为我完全理解了这一点,但是我已经做了一些错误的事情,而且我不能为我的生活理解什么。我已经按照教程写了这封信(我查了一下),但是无法让它工作,所以在这里,让我问一个简单的问题。

我已经创建了一个基于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 {}字段,我没有收到任何错误信息,但是我再也无法打印出我的名字字符串,这就是重点......

提前感谢您的时间和耐心!

1 个答案:

答案 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
    }
}