gpt4 book ai didi

c++ - 将 QQuickView 元素添加到现有窗口

转载 作者:行者123 更新时间:2023-11-30 05:05:00 25 4
gpt4 key购买 nike

我试图在每次使用 QTQuick 在 C++ 中单击按钮时向我的窗口添加一个元素。

我有一个 C++ 类:

自定义类.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 的实例并将其作为子项插入到main.qml 中的 rectangle 元素。

最佳答案

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

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

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

componentCreation.js代码:

var component;
var box;

function createBoxObject() {
component = Qt.createComponent("box.qml");
box = component.createObject(rectangle, {"x": 100, "y": 100});
}

就是这样,在main.qml中导入javascript,在按钮onClicked中调用脚本:

import com.acidic.customclass 1.0
import "componentCreation.js" as MyScript

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: {
MyScript.createBoxObject();

}
}
}

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

关于c++ - 将 QQuickView 元素添加到现有窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com