在我的应用程序中,我有一个QWidget作为另一个的孩子。任务包括将内部窗口小部件置于全屏模式,并能够使用相同的按钮在正常模式下再次看到它。部分我已设法通过以下方式完成:
if(!isFullScreen())
{
setWindowFlags(windowFlags() | Qt::Window);
showFullScreen();
}
else
{
setWindowFlags(windowFlags() & ~Qt::Window);
showNormal();
activateWindow();
}
当您返回以正常模式查看窗口小部件时,会出现问题。发生的事情:
我必须单击小部件来修复行为。这就好像小部件没有收到任何类型的事件或类似的事件。我试过调用setFocus(),但它没有用。我也试图通过以下方式手动发送一个事件,但它也没有工作:
QMouseEvent my_event(QEvent::MouseButtonPress, QPointF (0, 0), Qt :: NoButton, 0, 0);
QApplication::sendEvent(this, & my_event);
有任何想法吗?
谢谢。
无法使用Qt5.9.4在Xubuntu上重现您的问题。
但是我在上一份工作中做了同样的事情,并且在所有平台上都能正常工作。我认为这是这样的:
if(!isFullScreen())
{
setParent(0);
showFullScreen();
}
else
{
orignalParentLayout->addWidget(this); // better: insert at correct position
showNormal();
}
为此,您必须添加一些有关父级布局的知识。您可以在进入全屏模式之前尝试检测该信息,但这可能不值得。
你也可以尝试:
if(!isFullScreen())
{
logicalParent = parentWidget();
setParent(0);
showFullScreen();
}
else
{
setParent(logicalParent);
showNormal();
}
如果你没有布局。您可能还希望在进入全屏之前存储几何体。