QWidget不会在OS X(Yosemite)上以全屏模式关闭

QWidget will not close in full screen mode on OS X (Yosemite)

本文关键字:模式 Yosemite OS QWidget      更新时间:2023-10-16

我有一个QWidget的子类,我正在尝试修复一个错误,即无法使用QWidget::hide()或close()方法以编程方式隐藏/关闭它所在的窗口。

以下是我尝试过的一些东西:

if(widget->isFullScreen())
{
    widget->showNormal();   //Makes the window normal-sized before closing it
    widget->hide();
}

这是我尝试过的另一种方法:

if(widget->isFullScreen())
{
    widget->setWindowState(Qt::WindowMinimized);
    widget->hide();
}

我还试着建立一个插槽/信号系统:

if(netcam->isFullScreen())
{
    connect(this, SIGNAL(fullScreenExited()),
            this, SLOT(onFullScreenExited()));
    widget->showNormal();
    this->fullScreenExited(); //just hides the widget (or closes it) 
}
else
{
    widget->hide();
}

每次的结果都是车窗结冰,必须手动关闭。我怀疑第一个showNormal()是异步执行的,而第二个close()/hide()从未成功执行。

我也尝试过这个,希望它能在继续隐藏()/close()之前完成showNormal():

if(widget->isFullScreen())
    {
        widget->showNormal();
        QApplication::processEvents();
        widget->hide();
    }

主要问题:有人对如何从Qt代码关闭全屏QWidget有什么建议吗?

同样有帮助的问题:有没有办法确保事情同步运行?

谢谢!

编辑:实现这一点的唯一方法是在进程的更上层调用showNormal(),这样可以防止showNormal)和hide()的执行重叠。我会尽量记住稍后再回来,用一个普通的QWidget给出一个好的、基本的例子。

我还应该补充一点,窗口是通过位于OS X中每个窗口顶部的+(全屏)按钮进入全屏状态的。

这是一个已知的错误。

showNormal()showMinimized()的解决方案不起作用,因为窗口状态更改不同步。一个CCD_ 3是不够的。您需要等待相应的QEvent::WindowStateChange事件,才能知道窗口何时已完全移出全屏并可以接收到新的窗口状态更改。