qt隐藏控件在showEvent()

qt hiding a control on showEvent()

本文关键字:showEvent 隐藏 控件 qt      更新时间:2023-10-16

我在一个窗口上调用show(),它有几个控件,所有的控件都显示出来。

其中一个控件是继承自QFrame的自定义控件。

如果设置了特定的标志,我想隐藏此控件。这里是

void MyCustomControl::showEvent ( QShowEvent * /* evt */ )
{
    if (!m_visibleAllowed)
        hide();
} 

虽然这隐藏了控件,但它使控件变得愚蠢;它看起来是冻结的。当窗口大小被调整时,控件应该所在的区域不会被刷新。在论坛周围搜索,我得到的想法是隐藏控件不应该在showEvent()上完成,这是真的吗?如果是这样,那么我应该如何/在哪里隐藏控制。如果隐藏控制从showEvent()是可能的,我怎么能防止控制被冻结。

如果问题是在显示事件期间调用hide()(我不能确认它是明确不允许的,但通常听起来不像一个好主意),并且从显示事件调用hide是你真正需要这个代码的地方,那么你可以使用单镜头计时器:

QTimer::singleShot( 0, this, SLOT(hide()) );

,它将简单地延迟hide()函数的执行,直到下一轮事件循环。

也许您可以使用QStackedLayout或QStackedWidget,在堆栈中有两个小部件:您的控件和一个"空白"的QWidget。如果你这样做,而不是在控件上使用show()和hide(),你可以切换堆栈顶部的内容。

这样你就不会试图渲染一个隐藏的小部件-如果你的控件不可见,你渲染空白的QWidget代替-我怀疑这将解决你的图形故障。

希望这对你有帮助!