在 Qt 中,如果在 showEvent() 函数中调用了子窗体的 show() 函数,那么子窗体的 showEvent() 函数是不会触发的。这是因为 showEvent() 函数只会在窗体第一次显示时触发,而在主线程中调用子窗体的 show() 函数只是把窗体显示出来,并不会改变窗体的状态。
如果希望在主线程中调用子窗体的 show() 函数后,子窗体的 showEvent() 函数能够触发,可以在调用 show() 函数之前使用 setAttribute() 函数将窗体的 Qt::WA_WState_Hidden 属性设置为 true。这样,窗体就会被视为隐藏状态,在调用 show() 函数后会触发 showEvent() 函数。
例如:
void MainWindow::showChildWindow()
{
childWindow->setAttribute(Qt::WA_WState_Hidden, true);
childWindow->show();
}
上述代码中,主窗体的 showChildWindow() 函数调用了子窗体的 show() 函数,但是在调用 show() 函数之前,先调用了 setAttribute() 函数将子窗体的 Qt::WA_WState_Hidden 属性设置为 true,这样子窗体就会被视为隐藏状态,在调用 show() 函数后会触发 showEvent() 函数。