如何使非模态对话窗口始终位于顶部?

Mus*_*sis 7 qt qml

Dialog {}在我的应用程序中使用a的实例来显示一个小的控制器窗口,用户可以与之交互以影响主窗口中的功能(一种遥控器).我可以制作这个Dialog模态(modality: Qt.WindowModalmodality: Qt.ApplicationModal),或者我可以使它成为非模态的modality: Qt.NonModal.

我的问题是我需要使它非模态但总是在主窗口的顶部.如果我使用Qt.NonModal我仍然可以点击主表单,但然后我的对话框落后于它.该Dialog级似乎没有有一个flags:属性,所以我不能只将其设置为Qt.WindowsStaysOnTopHint.

有没有办法像QML一样设置像这样的Dialog的标志?或者是否可以在c ++中编写一个简单的实用工具方法,我可以从我的Dialog中调用它Component.onCompleted:并传入对话框以设置其窗口标志?

更新:为了说明我在说什么,这是我的主窗口顶部的对话框:

在此输入图像描述

这是我的主窗口下面的对话框:

在此输入图像描述

我希望我的对话框不要像我这样在我的主窗口下面,但我仍然希望能够点击并与我的主窗口进行交互.换句话说,我希望我的对话框是非模态的,但总是在顶部.

Bla*_*uze 7

尝试使用Window而不是Dialog这种方式,您将有权访问该flags属性.

您可以将窗口设置flagsQt.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)

结果:

总是在顶部窗口

  • ......完美,非模态,总是在我的主窗口之上.有时我讨厌我的同事,但是*你喜欢.我将为这个问题添加一笔赏金(你还是会给我一个赏金,以帮助我得到一个答案). (2认同)