3 Stimmen

C++- und QML-Integration, kann nicht auf Eigenschaften zugreifen

Also gut. Ich dachte, ich hätte das alles verstanden, aber offensichtlich habe ich etwas falsch gemacht, und ich kann beim besten Willen nicht verstehen, was. Ich habe die Tutorials auf den Buchstaben gefolgt (ich überprüft), aber kann nicht bekommen, es zu arbeiten, so hier, lassen Sie mich eine einfache Frage stellen.

Ich habe eine QObject-basierte Klasse erstellt, die eine einfache QString-Variable hat, die den Namen der Klasse speichert (dies ist nur zum Testen), es sieht wie folgt aus:

#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;
};

Dies wird mit der folgenden Funktion registriert: qmlRegisterType("ITI_UI", 1, 0, "CategoryPane");

Und ich versuche, die Namensvariable meiner CategoryPane-Klasse in einer QML-Datei auszugeben, die wie folgt aussieht:

import QtQuick 1.0
import ITI_UI 1.0

Rectangle {
    width: 300
    height: 300

    CategoryPane {
        id: whatever
        catName: "ey"
        Text {
            text: whatever.catName
        }
    }
}

Aber ich erhalte die folgende Fehlermeldung: qrc:/main.qml:11:3: Cannot assign to non-existent default property

Hinweis: Ich erhalte keine Fehlermeldung, wenn ich das Feld Text {} entferne, aber dann wiederum kann ich meine Namenszeichenfolge nicht ausdrucken, die der ganze Punkt ist...

Vielen Dank im Voraus für Ihre Zeit und Geduld!

8voto

fejd Punkte 2467

CategoryPane wird wie ein visuelles Element verwendet, aber es leitet sich von QObject ab. Haben Sie stattdessen versucht, von QDeclarativeItem zu erben?

Wenn Sie nur auf die Eigenschaft zugreifen und sie nicht als visuelles Element verwenden wollen, sollten Sie das tun können:

C++:

QDeclarativeView view;
CategoryPane pane;
view.rootContext()->setContextProperty("categoryPane", &pane);

QML:

import QtQuick 1.0

Rectangle {
    width: 300
    height: 300

    Text {
        text: categoryPane.catName
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X