在点击信号结束后应用setCurrentWidget

时间:2018-09-27 16:16:05

标签: qt click qstackedwidget

当我使用这种语法按名称创建广告位时:

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

不是先执行?

1 个答案:

答案 0 :(得分:1)

  

void QThread::sleep(unsigned long secs) [静态]
  强制当前线程休眠数秒。

waitSomeTime函数使主(当前)线程处于睡眠状态,因此它将阻塞所有内容,甚至包括GUI处理。正如@scopchanov所说,您可以使用QApplication::processEvents(),它将处理setCurrentWidget的事件。但是,在完成sleep之前,整个GUI仍将被阻止,这意味着将显示该小部件,但将无法处理任何操作。

因此,如果您想延迟工作,或者使用另一个新的QThread来完成工作,最好使用QTimer::singleShot