模态显示对话框
调用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_OBJECTpublic: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