2011-09-29 7 views
3

Ok. 그래서 나는이 사실을 완전히 이해했다고 생각했지만, 맹목적으로 내가 잘못한 것을 한 것입니다. 그리고 저의 인생이 무엇인지 이해할 수는 없습니다. 나는 자습서를 편지 (나는 확인했다)에 따라 갔지만 작동시키지 못한다. 그래서 여기에 간단한 질문을 해보자.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");

그리고 나는이처럼 보이는 QML 파일 내 CategoryPane 클래스의 이름 변수를 출력하기 위해 노력하고있어 :

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 {} 필드를 제거하면 오류 메시지가 나타나지만 전체 이름 인 내 이름 문자열은 다시 인쇄 할 수 없습니다. ..

시간과 인내에 미리 감사드립니다.

답변

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

실제로 어젯밤에 질문을 한 후 시합 2 시간 후에 QDeclarativeItem에서 상속해야한다는 것을 알았습니다. :) 그래도 rootContext() 메소드에 대해서는 알지 못해, 고마워! –

관련 문제