在Qt桌面应用程序中显示主窗体后执行操作

Mic*_*ent 2 c++ forms qt show

在Delphi中,我经常OnAfterShow为主要表单制作一个事件.OnShow()表单的标准几乎没有,postmessage()这将导致该OnafterShow方法被执行.

我这样做是为了有时冗长的数据加载或初始化不会停止正常加载和显示主窗体.

我想在Qt应用程序中执行类似的操作,该应用程序将在Linux或Windows的台式计算机上运行.

我有什么方法可以做到这一点?

Nej*_*jat 7

您可以覆盖showEvent()窗口并使用单次计时器调用要调用的函数:

void MyWidget::showEvent(QShowEvent *)
{
    QTimer::singleShot(50, this, SLOT(doWork());
}
Run Code Online (Sandbox Code Playgroud)

这种方式在即将显示窗口时showEvent被触发,并且在doWork显示之后的一小段时间内将调用该插槽.

您还可以覆盖eventFilter窗口小部件并检查QEvent::Show事件:

bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{
    if(obj == this && event->type() == QEvent::Show)
    {
        QTimer::singleShot(50, this, SLOT(doWork());
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

使用事件过滤器方法时,还应该通过以下方式在构造函数中安装事件过滤器:

this->installEventFilter(this);
Run Code Online (Sandbox Code Playgroud)