QtQuick.Window允许我们使用带有Qt::WindowFlags的“flags”属性来定义窗口行为。从Qt docs:
窗口标志是一种类型(例如Qt :: Dialog)和窗口系统的零或多个提示的组合(例如Qt :: FramelessWindowHint)。
如果窗口小部件有类型Qt :: Widget或Qt :: SubWindow并且变成窗口(Qt :: Window,Qt :: Dialog等),它将被放置在桌面上的位置(0,0)。如果窗口小部件是一个窗口并且变为Qt :: Widget或Qt :: SubWindow,则它将被放置在相对于其父窗口小部件的位置(0,0)。
Examples存在Qt使用Qt :: WindowFlags。
不幸的是,所有可用的示例都会创建 系统窗口 ,因为系统窗口管理器可以看到这些窗口。 docs声称 非系统窗口 也可以使用Qt::SubWindow标志来实现,但我无法实现此目的。 有人在QML中有一个有效的例子吗?
有关使用C语言的示例,请参阅QMdiSubWindow。
答案 0 :(得分:0)
import QtQuick 2.5
import QtQuick.Window 2.2
ApplicationWindow {
id: main
visible: true
width: 1280
height: 1024
Window {
visible: true
flags: Qt.SubWindow
}
}
对我来说,这会创建一个永远不在应用程序窗口顶部的辅助窗口,作为任务栏和任务切换的常规窗口不可见,并且没有最小化,最大化和关闭按钮,但它仍然具有一个框架和一个名字。但是,它不局限于应用程序主窗口的区域,它可以移动到它的外部,并且它独立于主窗口移动。
如果那是你所追求的行为,那么你就完全了。如果你想把它限制在主窗口并让它与它一起移动,只需用一个简单的qml Item
和必要的装饰和按钮来实现,然后就可以放入你想要的任何内容。
答案 1 :(得分:0)
QMdiSubWindow
实际上不是一个Window,而是一个小部件,就像一个特殊父窗口内的窗口一样。
我假设您正在使用QtQuick作为QML的UI技术,在这种情况下,您可以通过将任何类型的Item
作为根元素的子元素并使用更高的Z值来实现此目的然后是其他任何一个孩子。
常见的技术是拥有一个或多个叠加层
import QtQuick 2.0
Item {
id: mainWindow
// main window content that should be below the sub windows
Item {
id: mdiArea
// any item in here is on top of any mainWindow contents
// individual stacking order can easily be controlled with each item's "z" property
}
Item {
id: popupArea
// any item in here is on top of everything in mdiArea
}
}
而不是MdiArea的Item
可以考虑在C ++中创建一个也是emtpy的自定义项,但它为其子项提供位置管理,例如: “瓦片”或“堆叠”。
这样的课程甚至可以为Qt本身做出很好的贡献。