QProgressDialog 类
QProgressDialog类提供了对慢速操作进度的反馈。更多信息...
头文件 | #include <QProgressDialog> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承 | QDialog |
- 所有成员列表,包括继承成员
- QProgressDialog是标准对话框的一部分。
属性
|
公共函数
QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
virtual | ~QProgressDialog() |
bool | autoClose() const |
bool | autoReset() const |
QString | labelText() const |
int | maximum() const |
int | minimum() const |
int | minimumDuration() const |
void | open(QObject *receiver, const char *member) |
void | setAutoClose(bool close) |
void | setAutoReset(bool reset) |
void | setBar(QProgressBar *bar) |
void | setCancelButton(QPushButton *cancelButton) |
void | setLabel(QLabel *label) |
int | value() const |
bool | wasCanceled() const |
重新实现公共函数
virtual QSize | sizeHint() const override |
公共槽
void | cancel() |
void | reset() |
void | setCancelButtonText(const QString &cancelButtonText) |
void | setLabelText(const QString &text) |
void | setMaximum(int maximum) |
void | setMinimum(int minimum) |
void | setMinimumDuration(int ms) |
void | setRange(int minimum, int maximum) |
void | setValue(int progress) |
信号
void | 已取消() |
重写的保护函数
virtual void | changeEvent(QEvent *ev) override |
virtual void | closeEvent(QCloseEvent *e) override |
virtual void | resizeEvent(QResizeEvent *event) override |
virtual void | showEvent(QShowEvent *e) override |
保护槽
void | forceShow() |
详细说明
进度对话框用于提示用户操作将花费多少时间,以及演示应用程序没有冻结。它还可以给用户一个中断操作的机会。
进度对话框的一个常见问题是很难知道何时使用它们;操作在不同的硬件上花费的时间不同。QProgressDialog为此问题提供了解决方案:它会根据步骤所需的时间估计操作所需的时间,并且只有当这个估计值超过 minimumDuration()(默认4秒)时才显示自己。
使用 setMinimum() 和 setMaximum() 或构造函数来设置操作中的“步骤”数,并在操作进行时调用 setValue()。步数可以是任意选择的。可以是复制的文件数,收到的字节数,算法主循环的迭代次数,或者是其他合适的单位。进度从 setMinimum() 设置的值开始,当调用 setValue() 并且以其作为参数的 setMaximum() 设置的值为其参数时,进度对话框会显示操作已完成。
对话框将在操作结束时自动重置并隐藏自己。通过 setAutoReset() 和 setAutoClose() 来更改此行为。注意,如果您设置的新的最大值(使用 setMaximum() 或 setRange())等于您当前的 value(),则无论何种情况,对话框都不会关闭。
使用 QProgressDialog 有两种方式:模态和非模态。
与非模态 QProgressDialog 相比,模态 QProgressDialog 对于程序员来说更容易使用。在循环中进行操作,在间隔期间调用 setValue(),并使用 wasCanceled() 检查取消。例如
QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this); progress.setWindowModality(Qt::WindowModal); for (int i = 0; i < numFiles; i++) { progress.setValue(i); if (progress.wasCanceled()) break; //... copy one file } progress.setValue(numFiles);
非模态进度对话框适合在后台进行的操作,其中用户能够与应用程序进行交互。此类操作通常基于 QTimer(或 QObject::timerEvent())或 QSocketNotifier;或是在另一个线程中执行。在主窗口状态栏中的 QProgressBar 通常是非模态进度对话框的一个替代方案。
您需要确保事件循环正在运行,将canceled() 信号连接到一个槽函数,以停止操作,并定时调用 setValue()。例如
// Operation constructor Operation::Operation(QObject *parent) : QObject(parent), steps(0) { pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100); connect(pd, &QProgressDialog::canceled, this, &Operation::cancel); t = new QTimer(this); connect(t, &QTimer::timeout, this, &Operation::perform); t->start(0); } void Operation::perform() { pd->setValue(steps); //... perform one percent of the operation steps++; if (steps > pd->maximum()) t->stop(); } void Operation::cancel() { t->stop(); //... cleanup }
在两种模式下,进度对话框都可以通过使用 setLabel()、setBar() 和 setCancelButton() 替换子控件来自定义。函数 setLabelText() 和 setCancelButtonText() 设置显示的文本。
另请参阅 QDialog 和 QProgressBar。
属性文档
autoClose : bool
此属性表示对话框是否通过 reset() 隐藏
默认值为 true。
访问函数
bool | autoClose() const |
void | setAutoClose(bool close) |
另请参阅 setAutoReset。
autoReset : bool
此属性表示当 value() 等于 maximum() 时,进度对话框是否立即调用 reset()。
默认值为 true。
访问函数
bool | autoReset() const |
void | setAutoReset(bool reset) |
另请参阅 setAutoClose。
labelText : QString
此属性表示标签的文本
默认文本为空字符串。
访问函数
QString | labelText() const |
void | setLabelText(const QString &text) |
maximum : int
此属性表示进度条表示的最高值
默认值为 100。
访问函数
int | maximum() const |
void | setMaximum(int maximum) |
minimum : int
此属性表示进度条表示的最低值
默认值为 0。
访问函数
int | minimum() const |
void | setMinimum(int minimum) |
minimumDuration : int
此属性表示对话框出现前必须经过的时间
如果任务的预期持续时间小于 minimumDuration,则对话框根本不会出现。这可以防止对话框弹出来完成快速任务。对于预期将超过 minimumDuration 的任务,对话框将在 minimumDuration 时间后弹出,或在任何进度设置后立即弹出。
如果设置为 0,则只要设置任何进度,对话框就始终显示。默认值为 4000 毫秒。
访问函数
int | minimumDuration() const |
void | setMinimumDuration(int ms) |
value : int
此属性表示当前完成的进度量。
为了确保进度对话框按预期工作,您应最初将其属性设置为QProgressDialog::minimum(),最后设置为QProgressDialog::maximum();您可以在其间任意次数调用setValue()。
注意:如果进度对话框是模态的(参见QProgressDialog::QProgressDialog()), setValue()会调用QCoreApplication::processEvents(),因此在您的代码中注意避免不希望的重入。例如,不要在paintEvent()中使用QProgressDialog!
访问函数
int | value() const |
void | setValue(int progress) |
[只读]
wasCanceled : const bool
此属性表示对话框是否被取消
访问函数
bool | wasCanceled() const |
成员函数说明
[显式]
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
构建进度对话框。
默认设置
- 标签文本为空。
- 取消按钮文本为(已翻译)"取消"。
- 最小值为0;
- 最大值为100
参数parent是对话框的父级小部件。小部件标志f传递给QDialog::QDialog()构造函数。
另请参阅:setLabelText、setCancelButtonText、setCancelButton、setMinimum和setMaximum。
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
构建进度对话框。
参数labelText是用于提醒用户正在执行什么的文本。
参数cancelButtonText是取消按钮上显示的文本。如果传递QString(),则不显示取消按钮。
参数minimum和maximum是此进度对话框显示进度的操作步骤总数。例如,如果操作是检查50个文件,则这个值的最小值将是0,最大值将是50。在检查第一个文件之前,调用setValue(0)。处理每个文件时,调用setValue(1)、setValue(2)等,最后检查最后一个文件后调用setValue(50)。
参数parent是对话框的父级小部件。父级parent和小部件标志f传递给QDialog::QDialog()构造函数。
另请参阅:setLabelText、setLabel、setCancelButtonText、setCancelButton、setMinimum和setMaximum。
[virtual noexcept]
QProgressDialog::~QProgressDialog()
销毁进度对话框。
[slot]
void QProgressDialog::cancel()
重置进度对话框。 wasCanceled() 变为 true 直到进度对话框被重置。进度对话框变为隐藏。
[signal]
void QProgressDialog::canceled()
当点击取消按钮时发出此信号。默认情况下,它与 cancel() 插槽相连。
另请参阅wasCanceled。
[override virtual protected]
void QProgressDialog::changeEvent(QEvent *ev)
重新实现: QWidget::changeEvent(QEvent *event).
[override virtual protected]
void QProgressDialog::closeEvent(QCloseEvent *e)
重新实现: QDialog::closeEvent(QCloseEvent *e).
[protected slot]
void QProgressDialog::forceShow()
如果在算法开始后对话框仍然被隐藏,并且经过 minimumDuration 毫秒后,显示对话框。
另请参阅setMinimumDuration。
void QProgressDialog::open(QObject *receiver, const char *member)
打开对话框,并将其 canceled() 信号连接到由 receiver 和 member 指定的槽。
当对话框关闭时,将取消信号从槽断开连接。
[slot]
void QProgressDialog::reset()
重置进度对话框。如果 autoClose() 为 true,则进度对话框被隐藏。
另请参阅setAutoClose() 和 setAutoReset。
[override virtual protected]
void QProgressDialog::resizeEvent(QResizeEvent *event)
重新实现: QDialog::resizeEvent(QResizeEvent *).
void QProgressDialog::setBar(QProgressBar *bar)
将进度条部件设置为 bar。进度对话框将调整大小以适应。进度对话框将接管进度 bar 的所有权,当必要时将其删除,因此不要使用在栈上分配的进度条。
void QProgressDialog::setCancelButton(QPushButton *cancelButton)
将取消按钮设置为按钮,cancelButton。进度对话框将拥有此按钮,当必要时将其删除,因此请不要传递位于栈上的对象的地址,即使用 new() 创建按钮。如果传递 nullptr
,则不会显示取消按钮。
另请参阅 setCancelButtonText。
[slot]
void QProgressDialog::setCancelButtonText(const QString &cancelButtonText)
将取消按钮的文本设置为 cancelButtonText。如果设置为 QString(),则将导致取消按钮被隐藏并删除。
另请参阅 setCancelButton。
void QProgressDialog::setLabel(QLabel *label)
将标签设置为 label。进度对话框会调整大小以适应。该标签成为进度对话框的所有权,必要时将删除,因此请不要传递位于栈上的对象的地址。
另请参阅 setLabelText。
[slot]
void QProgressDialog::setRange(int minimum, int maximum)
将进度对话框的最小值和最大值分别设置为 minimum 和 maximum。
如果 maximum 小于 minimum,则 minimum 成为唯一的合法值。
如果当前值超出新范围,则使用 reset 将进度对话框重置。
[override virtual protected]
void QProgressDialog::showEvent(QShowEvent *e)
重新实现: QDialog::showEvent(QShowEvent *event)。
[override virtual]
QSize QProgressDialog::sizeHint() const
重新实现: QDialog::sizeHint() const。
返回一个适合进度对话框内容的大小。进度对话框需要时将自动调整大小,因此您通常不需要调用此方法。
© 2024 The Qt Company Ltd. 本文档的内容贡献者是各自版权的所有者。提供的文档符合 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 条款。Qt 和相关标志是 The Qt Company Ltd 在芬兰和其他国家/地区的商标。所有其他商标均为各自所有者的财产。