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 
    } 
} 
+0

我在昨天晚上问了一大堆问题,问了两个小时后,我不得不从QDeclarativeItem继承:) Did不知道关于rootContext()方法,谢谢! –