c++ - qt 在 showEvent() 上隐藏一个控件

标签 c++ qt qt4

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

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

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

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

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

谢谢你的时间。

最佳答案

如果问题出在您的节目事件期间调用 hide()(我无法确认它是否被明确禁止,但一般来说这听起来不是一个好主意)并且您可以从您的节目事件中调用 hide确实需要这段代码,然后你可以使用单次计时器:

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

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

关于c++ - qt 在 showEvent() 上隐藏一个控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603581/

相关文章:

c++ - 回调:将函数指针作为参数并传递一个附加参数

c++ - Lambda 捕获 QFile 对象

qt - 自动化自定义 QTranslator 上下文

c++ - 如何与多个客户端建立TCP连接,C++

c++ - 覆盖 std::string 空终止符合法吗?

c++ - 如何将 vector 从类传递给函数?

c++ - 我应该帮助哪个开源 C++ 数据库 GUI 项目?

c++ - 将 QImage(icon) 转换为 grayScale 格式,同时保留背景

c++ - QGraphicsScene 中的小部件

c# - 使用C#制作Maemo应用程序(代码转QT)