方式1:1次仅能创建1个窗口,该窗口不影响主窗口的操作
方式1比较简单,就是在主窗口的Window下,再套Window,然后给个id,通过id来控制该窗口的显示(show)与隐藏(默认)。
你也可以分文件去写这个子窗口,调用也是和上面一样的,只不过代码位置换了一下而已,这样的好处就是主窗口没那么多代码,可读性强一些,也便于管理和维护。
需要注意的是,这种方式创建的子窗口,如果主窗口关闭了,子窗口也会同时关闭的。
方式2:通过Component组件来创建子窗口
这种方式也很简单,就是把Window写到Component组件中,需要时就新建一个。如果绑定到按钮上,那么点一次就新建一个子窗口,可以一直新建。
这种方式新建出来的子窗口不受主窗口影响,即使主窗口关闭了,子窗口也不会消失,仍然会显示。并且它也是非模态窗口,不影响主窗口的操作。
方式2也可以分文件写子窗口,然后用 createObject() 的方法来新建子窗口。这种方式新建出来的窗口和上面的有所区别,区别在于:主窗口关闭后,子窗口会全部跟着消失。
这里多了一句代码是指定新建窗口的父对象。
方式3:模态子窗口
首先了解一下什么是模态窗口:
模态窗口是位于应用程序主窗口顶部的元素,它创建了一个模态,即当模态窗口出现时,用户必须首先与该窗口交互(如填写信息、选择选项、执行操作等)并关闭它,才能继续使用打开它的父应用程序的其他部分。这种窗口通常用于要求用户做出决定或输入信息的情况。
模态窗口的特点:
- 独占性:模态窗口出现时,会阻塞或禁用其父窗口(或应用程序中的其他窗口)的交互,直到模态窗口被关闭。
- 交互性:用户必须与模态窗口进行交互,完成所需的操作后,才能返回到原有的应用程序或继续其他操作。
- 可见性:模态窗口通常位于其父窗口之上,保持可见状态,以便用户进行交互。
在QML中创建模态窗口非常简单,以直接在主窗口中新建子窗口的代码为例,只要在show出子窗口的代码之前加一句:xxx.modality = Qt.WindowModal 即可,xxx是子窗口的id名称。
这样一来,模态子窗口就成了,但是同时也有且只有1个子窗口了,不对当前的模态窗口进行处理,是无法新建第二个子窗口的。