【发布时间】:2015-05-07 16:45:57
【问题描述】:
我有一个 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 中每个窗口的顶部。
【问题讨论】:
-
你能用一个普通的 QWidget 在一个新的项目中重现它吗?使其全屏,然后尝试关闭/隐藏它。
-
您讨论关闭小部件,但调用 QWidget::hide。你的意思是你想隐藏小部件,或者实际上关闭它,在这种情况下 QWidget::close 可能是你正在寻找的东西? qt-project.org/doc/qt-4.8/qwidget.html#close
-
我在 close() 和 hide() 之间切换的原因是因为我想证明这两种结果都是可以接受的。
-
[+] 不是全屏按钮,它是最大化按钮。 Mavericks 和 Yosemite 有一个单独的按钮,用于使窗口全屏显示 - 它是两个指向外部的箭头,该按钮位于窗口的右上角。你真正在说什么按钮?
-
我说的是 [+] 按钮
标签: c++ macos qt user-interface