本文介绍了在主窗体显示在Qt桌面应用程序后执行操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Delphi中,我经常为主窗体创建一个 OnAfterShow 事件。对于表单的标准 OnShow()只有一个 postmessage(),这将导致<$ c $



我这样做,因此有时冗长的数据加载或初始化不会停止正常加载和显示主要的形式。



我想做一个类似的Qt应用程序,将运行在台式机上的Linux或Windows。

$ b $

解决方案

您可以覆写<$ c
$ b

c> showEvent(),并使用单次计时器调用要调用的函数:

  void MyWidget :: showEvent(QShowEvent *)
{
QTimer :: singleShot(50,this,SLOT(doWork());
}

这样当窗口即将显示时,触发 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;
}

使用事件过滤器方法时,构造函数中的事件过滤器:

  this-> installEventFilter(this); 


In Delphi I often made an OnAfterShow event for the main form. The standard OnShow() for the form would have little but a postmessage() which would cause the OnafterShow method to be executed.

I did this so that sometimes lengthy data loading or initializations would not stop the normal loading and showing of the main form.

I'd like to do something similar in a Qt application that will run on a desktop computer either Linux or Windows.

What ways are available to me to do this?

解决方案

You can override showEvent() of the window and call the function you want to be called with a single shot timer :

void MyWidget::showEvent(QShowEvent *)
{
    QTimer::singleShot(50, this, SLOT(doWork());
}

This way when the windows is about to be shown, showEvent is triggered and the doWork slot would be called within a small time after it is shown.

You can also override the eventFilter in your widget and check for QEvent::Show event :

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

    return false;
}

When using event filter approach, you should also install the event filter in the constructor by:

this->installEventFilter(this);

这篇关于在主窗体显示在Qt桌面应用程序后执行操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 15:37