qt隐藏showEvent()上的控件

时间:2011-09-29 21:26:00

标签: c++ qt qt4

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

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

如果设置了特定标志,我想隐藏此控件。所以,我有

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

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

谢谢你的时间。

2 个答案:

答案 0 :(得分:5)

如果问题是在show事件期间调用hide()(我无法确认它是明确禁止的,但通常听起来不是一个好主意)并且从show事件中调用hide是你的地方真的需要这个代码然后你可以使用单次计时器:

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

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

答案 1 :(得分:1)

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

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

希望这有帮助!