加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:25:31 所属栏目:Windows 来源:网络整理
导读:我希望有一个Qt对话窗口: 始终保持在其父级(主应用程序窗口)之上, 允许用户与父窗口交互,和 并不总是保持在其他应用程序之上. 通过制作对话框模态我已经能够实现1和3,并且我可以通过使用Qt :: WindowStaysOnTopHint窗口标志来实现1和2.但我无法完成这三项工
我希望有一个Qt对话窗口:

>始终保持在其父级(主应用程序窗口)之上,
>允许用户与父窗口交互,和
>并不总是保持在其他应用程序之上.

通过制作对话框模态我已经能够实现1和3,并且我可以通过使用Qt :: WindowStaysOnTopHint窗口标志来实现1和2.但我无法完成这三项工作 – 是否可能?

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

解决方法

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

编辑:要使对话框非模态,要么将NULL设置为父级,要么将windowModality-Property设置为Qt :: NonModal并使用show而不是open或exec显示对话框

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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读