Qt 如何在QML中动态创建弹出窗口
当我尝试使用Qt.createQmlObject(…)或Qt.createComponent(…)动态创建弹出窗口时,出现异常: QML弹出窗口:找不到任何打开弹出窗口的窗口 这是我的密码:Qt 如何在QML中动态创建弹出窗口,qt,qml,qt5,qtquick2,Qt,Qml,Qt5,Qtquick2,当我尝试使用Qt.createQmlObject(…)或Qt.createComponent(…)动态创建弹出窗口时,出现异常: QML弹出窗口:找不到任何打开弹出窗口的窗口 这是我的密码: var popup1 = Qt.createQmlObject('import QtQuick 2.8; import QtQuick.Controls 2.1; Popup { id: popup; x: 100; y: 100; width: 200; height: 300; modal: true;
var popup1 = Qt.createQmlObject('import QtQuick 2.8; import QtQuick.Controls 2.1; Popup { id: popup; x: 100; y: 100; width: 200; height: 300; modal: true; focus: true; closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent; visible: false }',
window,
"DynamicPopup");
popup1.open()
var popupComponent = Qt.createComponent("qrc:/TestPopup.qml")
var popup2 = popupComponent.createObject(window);
popup2.open()
TestPopup.qml:
import QtQuick.Window 2.2
import QtQuick.Controls 2.1
Popup {
x: 100
y: 100
width: 200
height: 300
modal: true
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
visible: false
}
弹出窗口
不继承QQuickItem
,默认情况下,它是QML窗口
的父窗口,如果您使用的是QQuickWidget
,则不会实例化。因此,应按如下方式传递父级:
var popupComponent = Qt.createComponent("qrc:/TestPopup.qml")
var popup2 = popupComponent.createObject(window, {"parent" : window});
popup2.open()
父元素必须是继承自
QQuickItem
例如:
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.1
Window {
id: win
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Row{
Button{
id: item1
text: "btn1"
onClicked: {
var popup1 = Qt.createQmlObject('import QtQuick 2.8; import QtQuick.Controls 2.1; Popup { id: popup; x: 100; y: 100; width: 200; height: 300; modal: true; focus: true; closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent; visible: false }',
item1,
"DynamicPopup");
popup1.open()
}
}
Button{
id: item2
text: "btn2"
onClicked: {
var popupComponent = Qt.createComponent("qrc:/TestPopup.qml")
var popup2 = popupComponent.createObject(item2);
popup2.open()
}
}
}
}
方法1:
方法2:
A
弹出窗口
需要作为项的父项
,窗口
不是父项。
您应该改用。一种使用加载器动态加载弹出窗口的好方法:
Loader {
id: popupLoader
active: false
source: "qrc:/TestPopup.qml"
onLoaded: item.open()
}
function openMyPopup() {
if( popupLoader.active )
popupLoader.item.open()
else
popupLoader.active = true
}
@A.J,您的示例中的
窗口是什么?尝试将弹出窗口
绑定到QQuickItem
嗯,我的窗口是一个应用程序窗口。非常感谢你。