7

私は新しい QQuickWidget で経験しています。QQuickWidget と C++ の間でやり取りするにはどうすればよいですか?

C++

QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile("myqml.qml"));
view->setProperty("test", 0);

myLayout->addWidget(view);

QML

import QtQuick 2.1

Rectangle {
    id: mainWindow
    width: parent.width
    height: parent.height

    Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: test
    }
}

text: test動作しません:ReferenceError: test is not defined

QML ファイルに C++ 経由でいくつかのプロパティを与えるにはどうすればよいですか?

C++ で Text オブジェクトを取得し、そのテキストを更新することも可能ですか?

4

1 に答える 1

4

試してみる:

view->rootContext()->setContextProperty("test", "some random text");

それ以外の

view->setProperty("test", 0);

setProperty(name, val)nameobject にとして定義されたプロパティがある場合に機能しますQ_PROPERTY

QObject派生オブジェクトをviewのコンテキスト プロパティとして渡すことができます。

class Controller : public QObject
{
    Q_OBJECT
    QString m_test;

public:
    explicit Controller(QObject *parent = 0);

    Q_PROPERTY(QString test READ test WRITE setTest NOTIFY testChanged)

    QDate test() const
    {
        return m_test;
    }

signals:

    void testChanged(QString arg);

public slots:

    void setTest(QDate arg)
    {
        if (m_test != arg) {
            m_test = arg;
            emit testChanged(arg);
        }
    }
};

Controller c;
view->rootContext()->setContextProperty("controller", &c);

Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: controller.test
    }

C++ で Text オブジェクトを取得し、そのテキストを更新することも可能ですか?

一般に、これは最善のアプローチではないようです。c++コードがモデル ビュー パターンに従っている場合、コードはプレゼンテーションを認識すべきではありません。

ただし、ここで説明されているように可能です。

于 2014-05-28T13:43:51.347 に答える