我有一个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()永远不会成功执行。
我也试过这个,希望在继续hide()/ close()之前完成showNormal():
if(widget->isFullScreen())
{
widget->showNormal();
QApplication::processEvents();
widget->hide();
}
主要问题: 有没有人对如何处理从Qt代码关闭全屏QWidget有任何建议?
可能有帮助的问题: 有没有办法确保事情同步运行?
谢谢!
编辑: 我使用它的唯一方法是在进程中进一步调用showNormal(),这可以防止执行showNormal()和hide()时出现重叠。我会记得稍后回来并给出一个常规QWidget的基本示例。
我还应该补充说,使用+(全屏)按钮将窗口置于全屏状态,该按钮位于OS X中每个窗口的顶部。