首先介绍done函数,它的作用是:关闭当前窗口,同时返回一个状态信息。
Qt助手解释:关闭对话框并将其结果代码设置为r。如果这个对话框显示了exec(), done()导致本地事件循环结束,exec()返回r。
void QDialog::done(int r);
r 有两个状态 Accepted
和Rejected
例子如下:
main函数:
模态对话框
:就是与用户交互,用户需要给一个反应(点击取消,确定等等这些操作),若用户不关闭对话框那么对话框就会一直阻塞(停留在交互模式下)直到关闭为止。并且不能与同一应用程序中的任何其他窗口交互,直到关闭对话框。
解释main函数:当第一个对话框以模态方式创建后,会阻塞等待交互回应,我在第一个对话框使用了两个按钮来测试,确定和取消按钮,点击确定后会关闭当前对话框并返回Accepted,点击取消后会关闭当前对话框并返回Rejected,并赋值给res。
当res 等于Rejected
会直接结束程序,并在应用程序输出中打印‘失败’。
当res 等于Accepted
会创建出第二个窗口,并在应用程序输出中打印‘TwoDialog构造成功!’。
第一个窗口
这是第一个对话框,我在里面添加了两个按钮,确定和取消。
我分别在这两个按钮的点击事件中添加了done()函数,确定中设置的是Accepted状态,而取消中设置的是Rejected状态。
当我点击确定的时候,当前对话框会被关闭,并且main函数中的res就会接收到Accepted值,此时会打开(创建)第二个对话框。点击取消就会是Rejected。
第一个窗口实现代码:
Exam::Exam(QWidget *parent) :
QDialog(parent),
ui(new Ui::Exam)
{
ui->setupUi(this);
m_label = new QLabel(this);
m_label->setText("这是第一个对话框");
QFont f;
f.setPointSize(20);
m_label->setFont(f);
}
Exam::~Exam()
{
delete ui;
}
void Exam::on_pushButton_clicked()
{
done(Accepted); //关闭当前窗口,同时以接受状态返回
}
void Exam::on_pushButton_2_clicked()
{
done(Rejected); //关闭当前窗口,同时以取消状态返回
}
第二个窗口
当我在第一个对话框点击确定按钮的时候,会关闭第一个对话框,打开第二个对话框,如下:
第二个窗口实现代码:
TwoDialog::TwoDialog(QWidget *parent)
: QDialog(parent)
{
m_label = new QLabel(this);
resize(500, 600);
QFont f;
f.setPointSize(18);
m_label->setFont(f);
m_label->setText("我是第二个窗口");
}