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);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…