0

我想要做的是显示一组设置测试的页面。一旦所有细节都正确,用户按下 Commit 并显示下一个向导页面,我想立即在其中运行一系列测试。将这些显示给用户,一旦完成,用户就可以单击 Next。

我知道禁用 Next 只是返回 false 的一种情况,isComplete()并且可以正常实施。所以,我想使用在小部件显示后调用的函数,所以我使用showEvent()了向我指示要使用的函数。

目前我的测试只是显示一个进度条作为测试,因此使用了一个计时器。

void RunTestWizardPage::showEvent(QShowEvent *event)
{
    ui->statusEdit->setText("Running Tests");

    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(100);
}

void RunTestWizardPage::update()
{
    static int i = 10;

    ui->statusEdit->append("Running Tests...");

    ui->testProgress->setValue(i++);

    if(i == 100)
    {
        i = 0;
        timer->stop();
        complete = true;
        emit completeChanged();
    }
}

然而,这个函数似乎被调用了两次(我认为在小部件显示之前,尽管这可能是我调试的一个技巧),因此它会导致定时器出现问题,我认为定时器永远不会结束。我确实在文档中阅读了有关自发事件的信息,但据我所知,对该函数的两次调用都不是自发的。

它是否被故意调用了两次,如果是,我该如何停止它或者是否有其他功能可以使用?

谢谢!

4

1 回答 1

1

QWizardPage::initializePage()显示页面之前调用它。

于 2012-06-15T11:13:33.913 回答