您可以覆盖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)