模态显示对话框
调用exec方法可以使得对话框模态显示,但是一个阻塞函数
[virtual slot] int QDialog::exec()
对话框的三个槽函数
- accept
-
[virtual slot] void QDialog::accept();
- reject
-
[virtual slot] void QDialog::reject()
- done
-
[virtual slot] void QDialog::done(int r)
对话框内部调用上面三个槽函数都会使得对话框消失并使exec()阻塞函数返回,并设置exec()函数的返回值
- accept:将exec()返回值置为QDialog::Accepted(就是1),同时会发射accept的信号
- reject:将exec()返回值置为QDialog::Rejected(就是0),同时会发射reject的信号
- done:将exec()返回值置为done方法的参数r,比如调用done(100),那么exec函数的返回值就是100,同时会发射finished(r)的信号
获取返回值
int QDialog::result() const
对话框退出时的返回值除了可以通过exec()函数获取,还可以通过result方法获取
举例
对话框添加3个按钮,点击后分别调用3个槽函数,在main函数中打印对话框的返回值
点击accpt:
点击reject:
点击done:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr) : QDialog(parent)
{
resize(400,300);
QPushButton* btn_accept=new QPushButton("accept",this);
btn_accept->setGeometry(0,0,100,50);
QPushButton* btn_reject=new QPushButton("reject",this);
btn_reject->setGeometry(0,80,100,50);
QPushButton* btn_done=new QPushButton("done",this);
btn_done->setGeometry(0,180,100,50);
connect(btn_accept,&QPushButton::clicked,this,&QDialog::accept);
connect(btn_reject,&QPushButton::clicked,this,&QDialog::reject);
connect(btn_done,&QPushButton::clicked,this,[=](){this->done(1000);});
}
~Dialog()=default;
};
#endif // DIALOG_H
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog d;
auto ret=d.exec();
if(ret==QDialog::Rejected)
{
qDebug()<<"reject";
}
else if(ret==QDialog::Accepted)
{
qDebug()<<"accept";
}
else
{
qDebug()<<"done";
}
qDebug()<<"返回值:"<<d.result();
return a.exec();
}
学习链接:https://github.com/0voice