从普通的QML Window类生成QtQuick UI文件

时间:2017-11-02 15:30:37

标签: 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和QtQuickUISubwindow.qml,但都不起作用。

QtQuickUI文件不是子窗口吗?

1 个答案:

答案 0 :(得分:1)

WindowApplicationWindow不属于Item类型(或QQuickItem)。但是,这需要作为.ui.qml文件中的根项目放置为stated in the documentation

  

不支持以下功能:

     
      
  • [...]
  •   
  • 不是从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初始化多个窗口,您可以在此处找到:https://stackoverflow.com/a/47018205/2056452

您可以将source的{​​{1}}传递给模型,如果要打开多个不同的窗口,可以从那里读取它。

您可以修改srcLoader - 文件,并添加适当大小的QtQuickUISubwindow.qmlWindow作为根元素。然后你可以像以前一样使用JS创建所有内容 - 并希望垃圾收集器能很好地运行。