Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
208 views
in Technique[技术] by (71.8m points)

c++ - Take action after the main form is shown in a Qt desktop application

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...