更改QWidget标志的问题

问题描述 投票:0回答:1

在我的应用程序中,我有一个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);

有任何想法吗?

谢谢。

qt events qwidget flags
1个回答
0
投票

无法使用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();
}

如果你没有布局。您可能还希望在进入全屏之前存储几何体。

© www.soinside.com 2019 - 2024. All rights reserved.