Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从普通QML窗口类生成QtQuick UI文件_Qt_Qml - Fatal编程技术网

从普通QML窗口类生成QtQuick UI文件

从普通QML窗口类生成QtQuick UI文件,qt,qml,Qt,Qml,如何从普通qml窗口显示QtQuick UI文件集UI.qml和.qml 要显示父窗口类中的其他QML窗口,调用大致如下: var component = Qt.createComponent("SubWindow.qml") var window = component.createObject(window) window.show() 我尝试调用QtQuickUISubwindow.ui

如何从普通qml窗口显示QtQuick UI文件集UI.qml和.qml

要显示父窗口类中的其他QML窗口,调用大致如下:

                var component = Qt.createComponent("SubWindow.qml")
                var window    = component.createObject(window)
                window.show()
我尝试调用QtQuickUISubwindow.ui.qml和QtQuickUISubwindow.qml,但两者都不起作用

QtQuickUI文件不是子窗口吗?

窗口和应用程序窗口不是Item或QQuickItem类型。但是,这是作为根项放置在.ui.qml文件中的要求,如下所示:

不支持以下功能:

[...] 不是从QQuickItem或Item派生的根项 所以答案是:

不,您既不能将QtQuickUI文件用作窗口也不能用作子窗口

但是,您可以在子窗口中轻松地使用它们

//main.qml

Window {
    id: root
    width: 800
    height: 600
    visible: true
    Loader { // creates my sub window without JS
        id: winLoader
        active: false // Change to create the window.
        sourceComponent: Window {
            width: srcLoader.item ? srcLoader.item.width : 0
            height: srcLoader.item ? srcLoader.item.height : 0
            visible: srcLoader.item
            Loader {
                id: srcLoader
                source: "QtQuickUISubwindow.ui.qml" // Your ui.qml-file *here*
                active: true
            }
            onClosing: winLoader.active = false
        }
    }
    Button {
        text: "Show sub window!"
        onClicked: winLoader.active = true
    }
}
我还没有测试过这段代码。也许我以后会这样做,一旦我有机会访问Qt机器。如何使用中继器和ListModel初始化多个窗口,您可以在此处找到:

如果要打开多个不同的窗口,可以将srcLoader的源代码传递给模型,并从那里读取它


您可以修改QtQuickUISubwindow.qml文件,并添加适当大小的窗口或应用程序窗口作为根元素。然后,您可以像以前一样使用JS创建所有内容,并希望垃圾收集器能够很好地发挥作用。

1。既然可以用QML创建windows,为什么还要用JS创建windows呢。2.否,QtQuickUI文件不能将Window或ApplicationWindow作为根元素。尝试手动将.ui.qml-file的根元素更改为Window,并在设计器中打开它以查看。另请参见:不支持以下功能:[……]不是从QQuickItem派生的根项目或项目[…]我尝试使用qml代码,但无法使其正常工作,文档规范确实是正确的答案,我感谢您指出这一点。我忘记了让根窗口可见,并且我对ui.qml文件有了另一个名称。现在,我还添加了一个按钮,以激活加载程序。