1

我正在开发一个使用选项卡小部件并具有多个选项卡的 GUI 应用程序。我有一个有一张桌子的标签。我创建了一个每 5 秒刷新一次表格的方法。这是我的代码:

void MainWindow::delay(int seconds)
{
    QTime dieTime = QTime::currentTime().addSecs(seconds);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

void MainWindow::on_tabWidget_currentChanged(int inx)
{
    if (inx == 3)
    {
        while (ui->tabWidget->currentIndex() == 3)
        {
            delay(5);
            refreshTable();
        }
    }
}

我遇到的问题是,每当 while 循环运行时,我的 CPU 大约有 30% 被用完。基本上,应用程序是在说“我们到了吗?我们到了吗?我们到了吗?” 这似乎吸走了CPU。

有没有办法限制系统资源,或者有办法阻止它占用大部分 CPU?

4

1 回答 1

1

感谢 bluebob 为我指明了正确的方向。这是我的解决方案:

QTimer *timer;

void MainWindow::handleTableRefresh()
{
    if (ui->tabWidget->currentIndex() == 3)
    {
        refreshTable();
    }
    else
    {
        disconnect(timer, SIGNAL(timeout()), this, SLOT(handleTableRefresh()));
        timer->stop();
    }
}

void MainWindow::on_tabWidget_currentChanged(int inx)
{
    if (inx == 3)
    {
        timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(handleTableRefresh()));
        timer->start(5000);
    }
}
于 2013-11-08T19:29:07.283 回答