如何在QtQuick 2.0中与C++中的QML交互

Ita*_*dev 1 c++ qt qml qt-quick qt5

假设我们有一个非常简单的QML文件,就像这样:

import QtQuick 2.0

Rectangle {
    width: 800
    height: 600
    color: '#000'

    Text {
        text: qsTr("Hi all")
        anchors.centerIn: parent
    }
}
Run Code Online (Sandbox Code Playgroud)

QML文件加载了QtQuick2ApplicationViewer助手类,如下所示:

QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/MyApp/Login/Window.qml"));
viewer.showFullScreen();
Run Code Online (Sandbox Code Playgroud)

如果我想从C++中将Rectangle的颜色更改为白色,我该怎么办?我的猜测是:

QQuickItem *window = viewer.rootObject();
window->setProperty("color", "#fff");
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是以下编译器错误:

invalid use of incomplete type 'struct QQuickItem'
forward declaration of 'struct QQuickItem'
Run Code Online (Sandbox Code Playgroud)

Luc*_*lon 6

然后QQuickItem在你包含的标题中向前声明,但不完全合格.这里有更多信息.