在创建其他 window/widgets 时显示进度 window
Showing progress window while creating other window/widgets
我有一个如下所示的函数
void MainWindow::CreateEnvironment()
{
MdiWindow* sub = createSubWindow();
MyQTWidget* widget = CreateWidget();
..
..
}
我希望在此函数中,进度条将在开始时显示,并在函数结束时关闭。
但是添加
void MainWindow::CreateEnvironment()
{
**progressBarDialog->show();**
MdiWindow* sub = createSubWindow();
MyQTWidget* widget = CreateWidget();
..
..
**progressBarDialog->hide();**
}
不起作用,可能是因为函数需要先退出什么的。
最好的方法是什么?
我假设你使用 QProgressDialog?
您需要首先使用您期望的正确步骤数设置对话框,在它实际显示之前您希望等待多长时间,更重要的是:您需要调用 setValue()
更新进度条.
这是我如何解决这个问题的一个例子(据我所知)
void MainWindow::CreateEnvironment()
{
auto bar = new QProgressBarDialog(this);
bar->setLabelText(tr("Creating Environment..."));
bar->setCancelButton(nullptr); // No cancel button
bar->setRange(0, 10); // Let's say you have 10 steps
bar->setMinimumDuration(100); // If it takes more than 0.1 sec -> show the dialog
bar->setValue(0);
MdiWindow* sub = createSubWindow();
bar->setValue(1);
MyQTWidget* widget = CreateWidget();
..
..
bar->setValue(10);
MyLastWidget* last = CreateLastWidget();
bar->deleteLater(); // Not needed anymore, let's get rid of it
}
如果对话框从未显示,请不要太担心。除非你正在做非常繁重的计算(例如分配/初始化大量内存),否则创建小部件非常快并且会在 100 毫秒超时之前完成。
编辑:另一件需要注意的事情:QProgressDialog 意味着在主事件循环开始后工作。 (那是在你的 main()
中调用 app.exec()
之后)
如果您打算在 MainWindow 的构造函数中调用此函数,对话框甚至可能永远不会显示,因为 window 本身没有完全创建和运行。
如果您打算稍后调用此函数,当主要 window 已经显示在屏幕上并且用户点击某种 New Document
按钮时:您可以忽略这部分答案.
我有一个如下所示的函数
void MainWindow::CreateEnvironment()
{
MdiWindow* sub = createSubWindow();
MyQTWidget* widget = CreateWidget();
..
..
}
我希望在此函数中,进度条将在开始时显示,并在函数结束时关闭。 但是添加
void MainWindow::CreateEnvironment()
{
**progressBarDialog->show();**
MdiWindow* sub = createSubWindow();
MyQTWidget* widget = CreateWidget();
..
..
**progressBarDialog->hide();**
}
不起作用,可能是因为函数需要先退出什么的。 最好的方法是什么?
我假设你使用 QProgressDialog?
您需要首先使用您期望的正确步骤数设置对话框,在它实际显示之前您希望等待多长时间,更重要的是:您需要调用 setValue()
更新进度条.
这是我如何解决这个问题的一个例子(据我所知)
void MainWindow::CreateEnvironment()
{
auto bar = new QProgressBarDialog(this);
bar->setLabelText(tr("Creating Environment..."));
bar->setCancelButton(nullptr); // No cancel button
bar->setRange(0, 10); // Let's say you have 10 steps
bar->setMinimumDuration(100); // If it takes more than 0.1 sec -> show the dialog
bar->setValue(0);
MdiWindow* sub = createSubWindow();
bar->setValue(1);
MyQTWidget* widget = CreateWidget();
..
..
bar->setValue(10);
MyLastWidget* last = CreateLastWidget();
bar->deleteLater(); // Not needed anymore, let's get rid of it
}
如果对话框从未显示,请不要太担心。除非你正在做非常繁重的计算(例如分配/初始化大量内存),否则创建小部件非常快并且会在 100 毫秒超时之前完成。
编辑:另一件需要注意的事情:QProgressDialog 意味着在主事件循环开始后工作。 (那是在你的 main()
中调用 app.exec()
之后)
如果您打算在 MainWindow 的构造函数中调用此函数,对话框甚至可能永远不会显示,因为 window 本身没有完全创建和运行。
如果您打算稍后调用此函数,当主要 window 已经显示在屏幕上并且用户点击某种 New Document
按钮时:您可以忽略这部分答案.