1

私は Qt にまったく慣れていないので、おそらくかなり明白な質問をしていると思います。

C++ で作成したいすべてのカスタム QML GUI 要素のスーパー タイプを作成したいと考えています。このスーパー タイプは、定義済みの状態を QML アイテムに追加することになっています。これに似たもの:

    import StatedGuiElement 1.0
    import QtQuick 2.0

    Item {
        width: 300; height: 200

        StatedGuiElement {
            id: aStatedGuiElement
            anchors.centerIn: parent
            width: 100; height: 100
            //some visible Custom Gui Elements
    states:[
        State {
            name: "A_STATE"

        },
        State {
            name: "ANOTHER_STATE"
        }]
}

このチュートリアル ( http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example.html )から簡単なカスタム アイテムを作成する方法を知っています。から継承するC++クラスの列挙型を使用して状態を定義できると思いQQuickItemます。ただし、このチュートリアルでは、状態リストのようなより複雑な Qt Quick 要素を作成する方法は示していません。

class StatedGuiElement : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)
    //pass States via Q_PROPERTY?
public:
    //define Enum for fixed States here?
    //ENUM STATES {A_STATE, ANOTHER_STATE}
    StatedGuiElement( QQuickItem *parent = 0);

    QString name() const;
    void setName(const QString &name);


private:
    QString m_name;
    //Some List of States?


signals:

public slots:
};

そこで、気になる疑問点は以下の通りです。

  • QML State タイプを事前に定義して、それらを複数の要素で使用することさえ可能ですか?
  • などの C++ クラスにステート リストなどの複雑な QML タイプを追加するにはどうすればよいStatedGuiElementですか?
4

3 に答える 3

0

要素のリストであるプロパティが必要な場合、つまり. statesオブジェクトのリストであるState場合、型を使用して C++ でこれを行うことができますQQmlListProperty

QObjectリスト要素型の派生型が必要です。

class Entry : public QObject
{
    // the list entry element's API
};

class MyItem : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(QQmlListProperty<Entry> entries READ entries)


public:
    QQmlListProperty<Entry> entries() const {
        return QQmlListProperty<Entry>(this, m_entries);
    }

private:
    QList<Entry*> m_entries;
};

両方を登録するqmlRegisterType()

QMLで

MyItem {
    entries: [
        Entry {
        },  
        Entry {
        }
    ]
}
于 2016-12-03T13:52:48.327 に答える