我在一个窗口上调用show(),它有几个控件,并显示所有控件。
其中一个控件是继承自QFrame
的自定义控件。
如果设置了特定标志,我想隐藏此控件。所以,我有
void MyCustomControl::showEvent ( QShowEvent * /* evt */ )
{
if (!m_visibleAllowed)
hide();
}
虽然这隐藏了控制权,但它使控制权变得愚蠢;它看起来很冷冻。调整窗口大小时,控件应该在的区域不会刷新。搜索论坛,我得到的想法是隐藏控件不应该在showEvent()
上完成是真的吗?若是,那么我应该如何/在哪里尝试隐藏控件。如果可以从showEvent()
隐藏控件,我该如何防止控件被冻结。
谢谢你的时间。
答案 0 :(得分:5)
如果问题是在show事件期间调用hide()(我无法确认它是明确禁止的,但通常听起来不是一个好主意)并且从show事件中调用hide是你的地方真的需要这个代码然后你可以使用单次计时器:
QTimer::singleShot( 0, this, SLOT(hide()) );
将简单地推迟执行hide()
函数,直到下一轮事件循环。
答案 1 :(得分:1)
也许你可以使用在堆栈中有两个小部件的QStackedLayout或QStackedWidget:你的控件和一个“空白”QWidget。如果你这样做,而不是在你的控件上使用show()和hide(),你可以切换堆栈顶部的内容。
这样你就不会尝试渲染隐藏的小部件 - 如果你的控件不可见,你会渲染空白的QWidget - 我怀疑这会解决你的图形故障。
希望这有帮助!