当我使用这种语法按名称创建广告位时:
on_<widgetname>_clicked();
如果我想在该函数内显示特定的小部件,直到它到达该函数的末尾才会显示。
也就是说,当我创建以下函数时:
void MyWindow::on_myWidget_clicked()
{
// the stackedWidget is composed of:
// page_1 with myWidget
// page_2
ui->stackedWidget->setCurrentWidget(ui->page_2);
waitSomeTime();
}
还有
void MyWindow::waitSomeTime()
{
QThread t;
t.sleep(2); // Wait 2 seconds to see which line is going to be executed first.
}
启动代码后,首先经过了2秒钟,然后才显示page_2。
为什么行
ui->stackedWidget->setCurrentWidget(ui->page_2);
不是先执行?
答案 0 :(得分:1)
void QThread::sleep(unsigned long secs) [静态]
强制当前线程休眠数秒。
waitSomeTime
函数使主(当前)线程处于睡眠状态,因此它将阻塞所有内容,甚至包括GUI处理。正如@scopchanov所说,您可以使用QApplication::processEvents(),它将处理setCurrentWidget
的事件。但是,在完成sleep
之前,整个GUI仍将被阻止,这意味着将显示该小部件,但将无法处理任何操作。
因此,如果您想延迟工作,或者使用另一个新的QThread
来完成工作,最好使用QTimer::singleShot。