Skip to main content
 首页 » 编程设计

qt之父级之上的无模式 Qt 窗口,但不在其他应用程序之上

2025年12月25日89sharpest

我希望有一个 Qt 对话框窗口:

  • 始终位于其父级(主应用程序窗口)之上,
  • 允许用户与父窗口交互,以及
  • 并不总是处于其他应用程序的顶部。

  • 我已经能够通过创建对话框模式来实现 1 和 3,并且我可以通过使用 Qt::WindowStaysOnTopHint 窗口标志来实现 1 和 2。但我无法让这三项工作都成功——这可能吗?

    如果答案是特定于操作系统的,我主要在 Mac 上工作,但我更喜欢也适用于 Windows 和 Linux 的解决方案。谢谢!

    请您参考如下方法:

    您可以尝试使用 QGuiApplication::applicationStateChanged .这样,如果用户进入或离开您的应用程序,您就会收到通知。只需动态添加和删除 Qt::WindowStaysOnTopHint您的窗口的标志。如果您有多个窗口,可以使用 QGuiApplication::focusWindowChanged 和第一个一起。

    编辑:要使对话框非模态,请设置 NULL作为它的父级,或将 windowModality-Property 设置为 Qt::NonModal并使用 show 显示对话框而不是 openexec
    QDialog 子类中的示例代码:

    connect(QApplication::instance(), SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(changeAlwaysOnTop(Qt::ApplicationState))); 
     
    ... 
     
    void MyDialog::changeAlwaysOnTop(Qt::ApplicationState state) 
    { 
        if (state == Qt::ApplicationActive) 
            setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); 
        else 
            setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint); 
        show(); 
    }