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

标签 qt user-interface window

我希望有一个 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();
    }
    

    关于qt - 父级之上的无模式 Qt 窗口,但不在其他应用程序之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32216498/

    相关文章:

    qt - 滚动 QML 网格

    ios - 根据每个段中的标题更改分段控件的宽度?

    C++ 创建弹出窗口的问题,取而代之的是获取其他窗口

    c++ - QTableView编辑模式

    qt - Qt信号槽cv::Mat无法读取内存访问冲突

    java - Android 如何制作类似下雨的动画?

    java - 等待然后接收文本字段输入而不卡住 GUI

    javascript - window.setInterval 在这里使用正确还是我引入了麻烦?

    cocoa - 正确推送 NSView

    c++ - 了解并避免多线程应用程序中嵌套锁的危险