如何通过 qml 在移动设备中创建新窗口?

Posted

技术标签:

【中文标题】如何通过 qml 在移动设备中创建新窗口?【英文标题】:How to create new window in mobile devices via qml? 【发布时间】:2017-02-16 10:36:07 【问题描述】:

背景: 我正在尝试使用 qt 创建一个跨平台应用程序。

解决方案 找到:

        MouseArea 
            id: toOtherViewClicked
            width: 44
            anchors.fill: parent

            onClicked: 
                var component = Qt.createComponent("listOfMaterials.qml")
                var window = component.createObject("secondQML")
                window.show()
            
        

问题 问题 它的行为真的很奇怪。窗口显示几分钟,但随后又回到主窗口。是否可以以适当的方式呈现新窗口打开?

【问题讨论】:

请提供complete example。另外,当窗口消失时,您是否看到任何错误消息? 【参考方案1】:

您应该登录Component.onDestruction()

GarbageCollector 很可能会擦除您的窗口,因为您没有设置父级。component.createObject() 的正确语法将对象(父对象)作为第一个参数。您改为传递一个字符串。如果你传递一个对象,很有可能GarbageCollector 不会擦除你新创建的窗口,直到父对象被销毁。

把它变成这样:

var window = component.createObject(toOtherViewClicked)

【讨论】:

有道理,谢谢!但在这种情况下,“toOtherViewClicked”是鼠标区域的 id,我不应该发送窗口的 id 吗? 这取决于你。如果你手头有一个窗口的 id,为什么不呢。唯一的要求是,由 id 引用的对象比创建的第二个窗口的寿命更长。

以上是关于如何通过 qml 在移动设备中创建新窗口?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过级联QML在blackberry 10设备文档目录中创建XML文件?

在移动设备上部署 C++ QML 插件的正确方法是啥?

Qt/QML SwipeDelegate 在移动设备(Android、iOS)上无法正常工作

在 Xcode 6 中创建新的资产目录/图像集

如何在移动设备上禁用放大弹出窗口?

如何使用放大弹出窗口在移动设备中显示地图?