我Dialog {}
在我的应用程序中使用a的实例来显示一个小的控制器窗口,用户可以与之交互以影响主窗口中的功能(一种遥控器).我可以制作这个Dialog模态(modality: Qt.WindowModal
或modality: Qt.ApplicationModal
),或者我可以使它成为非模态的modality: Qt.NonModal
.
我的问题是我需要使它非模态但总是在主窗口的顶部.如果我使用Qt.NonModal
我仍然可以点击主表单,但然后我的对话框落后于它.该Dialog
级似乎没有有一个flags:
属性,所以我不能只将其设置为Qt.WindowsStaysOnTopHint
.
有没有办法像QML一样设置像这样的Dialog的标志?或者是否可以在c ++中编写一个简单的实用工具方法,我可以从我的Dialog中调用它Component.onCompleted:
并传入对话框以设置其窗口标志?
更新:为了说明我在说什么,这是我的主窗口顶部的对话框:
这是我的主窗口下面的对话框:
我希望我的对话框不要像我这样在我的主窗口下面,但我仍然希望能够点击并与我的主窗口进行交互.换句话说,我希望我的对话框是非模态的,但总是在顶部.
尝试使用Window
而不是Dialog
这种方式,您将有权访问该flags
属性.
您可以将窗口设置flags
为Qt.WindowStaysOnTopHint
始终位于其他窗口之上.你可以在这里找到标志列表.(别忘::
了.
在QML中替换by )
Main.qml:
import QtQuick 2.5
import QtQuick.Controls 2.0
import QtQuick.Dialogs 1.2
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Button {
id: btn
width: 100 ; height : 40
text: "click me"
}
Text {
anchors.top : btn.bottom
text: "Button currently pressed"
visible: btn.pressed
}
DialogOnTop {
}
}
Run Code Online (Sandbox Code Playgroud)
DialogOnTop.qml:
import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 1.4
Window {
id: myWindow
width: 200
height: 200
flags: Qt.Window | Qt.WindowSystemMenuHint
| Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint
| Qt.WindowMaximizeButtonHint | Qt.WindowStaysOnTopHint
visible: true
modality: Qt.NonModal // no need for this as it is the default value
Rectangle {
color: "lightskyblue"
anchors.fill: parent
Text {
text: "Hello !"
color: "navy"
anchors.centerIn: parent
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果: