将QQuickView元素添加到现有窗口

时间:2018-02-04 06:21:04

标签: c++ qt qtquick2

每次在使用QTQuick的C ++中单击按钮时,我都会尝试向窗口添加元素。

我有一个C ++类:

customclass.cpp

void CustomClass::clicked() {
    QQuickView view;
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QUrl("qrc:///box.qml"));

    QObject *rectangleContainer = (QObject*)findItemByName(DownloadManager::rootObjects, "rectangle");

    // view.setParent(rectangleContainer); Does not work ?
    view.setProperty("visible", "true");
    view.show();
}

和两个qml文件:

main.qml

import com.acidic.customclass 1.0

ApplicationWindow {
    visible: true
    width: 1280
    height: 800

    CustomClass {
        id: demo
    }

    Rectangle {
        id: rectangle
        objectName: "rectangle"
        width: 200
        height: 200
        color: "#ffffff"
    }

    Button {
        id: button
        text: qsTr("Button")
        onClicked: {s
            demo.clicked();
        }
    }
}

box.qml

Item {
    Text {
        id: text1
        text: qsTr("Box!")
        font.pixelSize: 12
    }
}

代码已缩短但仍应足以显示我当前的状态。

单击按钮时确实调用了

CustomClass::clicked,但我的目的是创建box.qml的实例并将其作为子项插入rectangle内的main.qml元素}。

1 个答案:

答案 0 :(得分:1)

不需要c ++后端,这可以通过javascript在qml中直接使用。

您可以在Javascript中使用Qt.createComponent()来添加动态对象。

创建并添加javascript资源(componentCreation.js),此脚本首先使用box.qml Qt.createComponent() 创建组件,然后使用{{1}将该新组件作为子项附加到createObject()元素:

"rectangle"代码:

componentCreation.js

多数,在main.qml中导入javascript,也在按钮var component; var box; function createBoxObject() { component = Qt.createComponent("box.qml"); box = component.createObject(rectangle, {"x": 100, "y": 100}); } 中调用脚本:

onClicked

注意:我将box.qml添加到资源以供直接访问。 创建的对象将成为main中矩形对象的子对象。