我正在使用QT来实现一些UI程序。 在这个程序中,我需要一个进度对话框。我尝试使用内置的QProgressDialog,它工作正常但在我的情况下,我需要确认(使用另一个对话框)单击“取消按钮”。
在QProgressDialog中单击取消按钮后,进度对话框将被取消,因此,我尝试实现自己的进度对话框(非常简单,带有进度条的对话框)。但是,如果我使用自己的进度对话框,则会出现一些问题。它无法移动或点击。一旦我尝试移动它并且对话框失去焦点,进度条将不再更新,它无法再次获得焦点。我尝试设置不同的模态,但Qt :: ApplicationModal或Qt :: WindowModal具有相同的情况。
以下是我的进度对话框类,如果有人知道如何修改QProgressDialog以满足确认要求或我的代码中的问题在哪里。
头:
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
void setRange(int minimum, int maximum);
void setValue(int value);
void setLabelText(QString labtext);
bool wasCanceled();
private:
Ui::Dialog *ui;
bool cancelStatus;
private slots:
void cancel();
};
来源:
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
cancelStatus = false;
ui->progressBar->setRange(0,1);
ui->progressBar->setValue(0);
//this->setWindowModality(Qt::WindowModal);
show();
}
Dialog::~Dialog(){
delete ui;
}
void Dialog::setRange(int minimum, int maximum){
ui->progressBar->setRange(minimum,maximum );
}
void Dialog::setValue(int value){
this->ui->progressBar->setValue(value);
}
void Dialog::setLabelText(QString labtext){
this->ui->label->setText(labtext);
}
void Dialog::cancel(){
// pop up the confirm dialog here
// cancelStatus = true if the confirm dialog is accepted, else do nothing .
}
bool Dialog::wasCanceled(){
return cancelStatus;
}
答案 0 :(得分:2)
从Qt文档中:单击取消按钮时会发出信号QProgressDialog :: canceled(),默认情况下它连接到cancel()插槽。
您是否尝试将取消的信号连接到您自己的验证槽,如果用户确认是选择,则取消对话框?
在连接您自己的插槽之前,使用QObject :: disconnect()断开取消信号的取消信号:http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect