从另一个qml加载qml文件中组件的动态属性

时间:2016-07-22 11:29:00

标签: c++ qml qt-quick

我的项目中有两个QML文件。

main.qml:

Window{
width: 800
height: 500
visible: true
id:mainWinenter 
Item {
       id: inlinecomponent
       Rectangle {
       id: display
       width: 50; height: 50
       color: "blue"
       }
   }
   MouseArea {
       anchors.fill: parent
       onClicked: {
           var component = Qt.createComponent("qrc:/Test.qml");
           var object  = component.createObject(inlinecomponent, {"x": 50, "y": 50});
       }
   }   }

和我的Test.qml文件:

Item{
id:mc

Rectangle{
    x: 0
    y: 0
    id: rec
    width: 150; height:75
    color: "grey"
    objectName: "recc"
    visible: true
}}

main.cpp中:

int main(int argc, char *argv[]){

 QApplication app(argc, argv);
 QQmlApplicationEngine engine;
 engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

 QQuickView view;
 view.setSource(QUrl("qrc:/Test.qml"));
 QQuickItem *object = view.rootObject();
 QObject *rect = object->findChild<QObject*>("recc");
 if (rect)
     rect->setProperty("color", "red");

 view.show();

return app.exec();} 

在main.cpp中,我使用setProperty函数来更改Test.qml文件中矩形的颜色。我在新窗口中加载文件时颜色会发生变化,但在main.qml文件中加载时它不会更改。如何在main.qml加载时更改它?

我的输出包含两个窗口。一个用于main.qml,另一个用于Test.qml。

this is my main.qml output

this is my Test.qml output

我的Test.qml窗口中的矩形颜色为红色,但在main.qml中加载灰色。我想在主文件中加载红色,我想用我的cpp代码执行此操作。

0 个答案:

没有答案