Qt应用开发(基础篇)——进度对话框 QProgressDialog

一、前言

         QProgressDialog类继承于QDialog,是Qt设计用来反馈进度的对话框。

        对话框QDialog

         QProgressDialog提供了一个进度条,表示当前程序的某操作的执行进度,让用户知道操作依旧在激活状态,配合按钮,用户就可以随时终止操作,并且进度条、标签、按钮都可以自定义。其他属性比如最大值、最小值、步长、当前值等的操作和QProgressBar相同

        QProgressDialog在不知道何时显示进度条的情况下提供了解决方案,比如在操作硬件的时时候,在不同系统消耗的时间不同,它提供了minimumDuration属性,在超过minimumDuration之后才显示进度条。 

QProgressDialog progress("Copying files...", "Abort Copy", 0, 100, this);
progress.setWindowModality(Qt::WindowModal);
progress.setWindowTitle("QProgressDialog");
progress.open(this,SLOT(onMessageBoxFinish()));
progress.setValue(20);
progress.exec();

二、QProgressDialog类

1、autoClose

        该属性表示是否使用reset()会自动隐藏进度条,默认为false。

bool autoClose() const
void setAutoClose(bool close)

2、autoReset

        该属性表示是否在当前值value等于最大值maximum的时候调用reset(),默认为true。

bool autoReset() const
void setAutoReset(bool reset)

3、labelText

        该属性表示标签的文本,默认为空字符串。

QString labelText() const
void setLabelText(const QString &text)

4、maximum

        该属性表示进度条可设的最大值,默认值为100。

int maximum() const
void setMaximum(int maximum)

5、minimum

        该属性表示进度条可设的最小值,默认值为0。

int minimum() const
void setMinimum(int minimum)

6、minimumDuration

        该属性保存对话框出现之前必须经过的时间,如果任务的预期持续时间小于该值,则不会出现对话框。这可以防止为快速结束的任务弹出对话框。如果设置为0,则只要设置了任何进度,对话框就会立即显示。默认值为4000毫秒。

int minimumDuration() const
void setMinimumDuration(int ms)

7、value

        该属性表示当前进度条的值,该值要不小于最小值minimum,不大于maximum。

int value() const
void setValue(int progress)

8、wasCanceled

        该属性表示对话框是否被取消。

bool wasCanceled() const

        配合模式对话框使用,在setValue()的时候判断对话框是否取消。

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);

9、公共函数

1)open

        打开对话框并将其canceled()信号连接到接收器和成员指定的插槽。如果槽函数的第一个参数有一个指针,则连接到buttonClicked(),否则连接到finished(),当对话框关闭的时候,这个信号槽连接会被断开。        

void open(QObject *receiver, const char *member)

        实例:打开对话框的同时绑定信号canceled与槽函数onQProgressDialogCanceled,对话框关闭取消信息。 

public slots:
    void onQProgressDialogCanceled();
void MainWindow::onQProgressDialogCanceled()
{
    qDebug()<<"QProgressDialog Finish";
}
QProgressDialog progress("Copying files...", "Abort Copy", 0, 100, this);
progress.setWindowModality(Qt::WindowModal);
progress.setWindowTitle("QProgressDialog");
progress.open(this,SLOT(onQProgressDialogCanceled()));
progress.setValue(20);
progress.exec();
 2)setBar

        自定义进度条,进度对话框会自动调整大小。进度对话框拥有将在必要时删除的进度条,因此不要使用在堆栈上分配的进度条。

void setBar(QProgressBar *bar)
3)setCancelButton

        自定义取消按钮,进度对话框拥有这个按钮的所有权,它将在必要时被删除,所以不要传递堆栈上对象的地址。

void setCancelButton(QPushButton *cancelButton)
4)setLabel

        自定义标签,进度对话框会自动调整大小。标签归进度对话框所有,必要时将被删除,因此不要在堆栈上传递对象的地址。

void setLabel(QLabel *label)

10、公共槽函数

1)cancel

        取消操作,会产生重置进度对话框,wasCanceled()变为true,直到进度对话框被重置,进度对话框隐藏。

void cancel()
2)reset

        重置进度对话框,如果autoClose设置为true,那么进度条会被隐藏。

void reset()
3)setCancelButtonText

        设置取消按钮上面的文本。

void setCancelButtonText(const QString &cancelButtonText)
4)setRange

        等同于setMinimum和setMinimumDuration。

void setRange(int minimum, int maximum)

11、信号

1)canceled

        取消按钮被点击时触发。

void canceled()

 示例:定时器循环对进度条赋值,当到达最大值的时候或者取消按钮被按下的时候结束定时器。

 // 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
 }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 PySide6 中,创建 ProgressDialog 窗体的步骤如下: 1. 导入必要的模块: ```python from PySide6.QtWidgets import QApplication, QProgressDialog ``` 2. 创建 QApplication 实例: ```python app = QApplication() ``` 3. 创建 QProgressDialog 实例: ```python progress_dialog = QProgressDialog("Loading...", "Cancel", 0, 100) ``` 其中,第一个参数是进度条上显示的文本,第二个参数是取消按钮上显示的文本,第三个参数是进度条的最小值,第四个参数是进度条的最大值。 4. 设置进度条的样式和其他属性: ```python progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setWindowTitle("Progress") progress_dialog.setLabelText("Loading...") progress_dialog.setCancelButtonText("Cancel") progress_dialog.setMinimumDuration(0) progress_dialog.setRange(0, 100) ``` 其中,`setWindowModality` 方法设置了窗口模态,即在进度条窗口打开时,其他窗口将无法操作;`setWindowTitle` 方法设置了窗口标题;`setLabelText` 方法设置了进度条上显示的文本;`setCancelButtonText` 方法设置了取消按钮上显示的文本;`setMinimumDuration` 方法设置了进度条最小显示时间;`setRange` 方法设置了进度条的最小值和最大值。 5. 显示进度条: ```python progress_dialog.show() ``` 6. 更新进度条的值: ```python progress_dialog.setValue(50) ``` 其中,`setValue` 方法设置了进度条的当前值。 7. 关闭进度条: ```python progress_dialog.close() ``` 完整的代码示例: ```python from PySide6.QtWidgets import QApplication, QProgressDialog app = QApplication() progress_dialog = QProgressDialog("Loading...", "Cancel", 0, 100) progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setWindowTitle("Progress") progress_dialog.setLabelText("Loading...") progress_dialog.setCancelButtonText("Cancel") progress_dialog.setMinimumDuration(0) progress_dialog.setRange(0, 100) progress_dialog.show() for i in range(101): progress_dialog.setValue(i) if progress_dialog.wasCanceled(): break progress_dialog.close() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波塞冬~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值