【问题标题】:Can't show() QWindow when it was hidden with cmd + h on MacOS在 MacOS 上使用 cmd + h 隐藏时无法显示() QWindow
【发布时间】:2021-01-27 13:31:33
【问题描述】:

我有一个问题,当它被 MacOS 快捷方式隐藏时,我无法提升我的应用程序窗口。它在所有其他情况下都能正常工作。

在我的应用程序中,我调用了 1 个主 qWindow QWindow* mMainWindow; 并将以下代码添加到托盘按钮

    mMenu->addAction(createAction("Show", [=] {
        if (mMainWindow) {
            mMainWindow->show();
            mMainWindow->raise();
            mMainWindow->requestActivate();
        }

当我只使用 qt mMainWindow->hide() 然后将其升高时,mMainWindow 工作正常。方法mMainWindow->isActive()在应用处于活动状态时返回正确的true状态,在应用隐藏时返回false

但是当我在 mac "cmd + h" 中使用内置隐藏应用程序时,mMainWindow->isActive() 返回true,无论应用程序是否隐藏。调用我的操作项没有任何作用,mMainWindow 始终保持隐藏状态。

有没有办法解决这个问题?我看到人们推荐使用QWidget 而不是QWindow 并调用widget->activateWindow(),但这不是我可以使用的解决方案。

【问题讨论】:

    标签: macos qt qwindow


    【解决方案1】:

    我发现如果你在调用show() 之前调用hide()show() 的行为会正确。

    此问题的解决方法如下

    mMenu->addAction(createAction("Show", [=] {
            if (mMainWindow) {
                mMainWindow->hide();
                mMainWindow->show();
                mMainWindow->raise();
                mMainWindow->requestActivate();
            }
        }));
    

    当应用程序已经处于焦点时,可能会出现问题,并且您单击 Show 它会隐藏并再次显示,但在我的情况下这是可以接受的问题。

    【讨论】:

    • 不是先隐藏(在某些平台上肯定会导致窗口闪烁),您是否尝试过其他show...功能?
    • from qt doc for show() This is equivalent to calling showFullScreen(), showMaximized(), or showNormal(), depending on the platform's default behavior for the window type and flags. 所以这是一回事,但添加了一个窗口类型的标志。是的,我尝试过操纵标志。问题是QWindow“认为”它已经处于活动状态,所以它什么都不做。显然是某种 qt 错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多