qt — взаимодействие QQuickWidget и C ++

Я испытываю с новым 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 ++?

Можно ли получить объект Text в C ++ и обновить его текст?

6

Решение

Дайте ему попытку:

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

вместо

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

setProperty(name, val) работает, если объект имеет свойство name определяется как Q_PROPERTY,

Можно пройти QObject-приведенный объект как свойство контекста представления:

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
}

Можно ли получить объект Text в C ++ и обновить его текст?

В общем, это не похоже на лучший подходc++ код не должен знать о представлении, если он следует образцу представления модели.

Однако это возможно, как описано Вот.

3

Другие решения


По вопросам рекламы [email protected]