QWidget不会在OS X(Yosemite)上以全屏模式关闭
QWidget will not close in full screen mode on OS X (Yosemite)
我有一个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
事件,才能知道窗口何时已完全移出全屏并可以接收到新的窗口状态更改。
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 此模式的C++RegEx
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- c++方法参数只能在linux的发布模式下自行更改
- 资源管理设计模式
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 小字符串优化(调试与发布模式)
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 在C++的一系列数字中查找重复模式
- 是否允许使用带有"w+"模式的 freopen 进行标准设置?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- С++ wxWidgets:代码架构,设计原则和模式
- QWidget不会在OS X(Yosemite)上以全屏模式关闭