Я испытываю с новым 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 ++ и обновить его текст?
Дайте ему попытку:
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++
код не должен знать о представлении, если он следует образцу представления модели.
Однако это возможно, как описано Вот.