【问题标题】:qt hiding a control on showEvent()qt 在 showEvent() 上隐藏控件
【发布时间】:2011-11-28 01:11:11
【问题描述】:

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

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

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

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

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

感谢您的宝贵时间。

【问题讨论】:

    标签: c++ qt qt4


    【解决方案1】:

    如果问题在于在您的表演活动期间调用 hide()(我无法确认它是否被明确禁止,但总的来说这听起来不是一个好主意)并且从您的表演活动中调用 hide 就是您的位置真的需要这个代码然后你可以使用一个单次计时器:

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

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

    【讨论】:

      【解决方案2】:

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

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

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 2013-10-06
        • 2010-11-16
        相关资源
        最近更新 更多