如何在过程功能完成时使QProgressDialog停留?

时间:2015-01-29 19:24:23

标签: c++ qt

我在按钮单击处理程序中使用QProgressDialog但是当进程完成时,对话框也会自动关闭。我是否必须使用成员变量的指针创建它,而不是自动关闭?这是我的代码的主旨。

void MainWindow::on_pushButton_clicked()
{
    QProgressDialog progress("Counting files...", "App", 0, 100, this, Qt::Dialog);
    progress.setAutoClose( false );
    progress.setMinimumDuration(0);
    progress.setWindowModality(Qt::WindowModal);
    progress.setModal( true );

    for (int i = 0; i < 100; i++)
    {
        progress.setValue(i);
    }

}

正如你所看到的,我正在做任何可能使其成为模态的东西,但它会在循环结束后自动关闭。当过程功能完成时,使它停留的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

问题是您的progress对象在MainWindow::on_pushButton_clicked()广告位的末尾被销毁。您应该将其定义为类成员,并在需要时动态显示它。

class MainWindow {
    private:
        QSharedPointer<QProgressDialog> progress;

    public slots:
        void on_pushButton_clicked() {
            progress = QSharedPointer<QProgressDialog>(new QProgressDialog("Counting files...", "App", 0, 100, this, Qt::Dialog));
            progress->setAutoClose( false );
            progress->setMinimumDuration(0);
            progress->setWindowModality(Qt::WindowModal);
            progress->setModal( true );

            for (int i = 0; i < 100; i++)
            {
                progress->setValue(i);
            }
        }
};