accept()和reject() 这两个槽函数 都会和close() 一样关闭dialog 但是 accept()关闭后 返回了Dialog::Accepted 但是 reject()关闭后 返回了Dialog::Rejected 这样当我们需要 知道 dialog 是哪个按钮关闭的时候,就可以调用这连个槽;
#include "mainwindow.h" #include "ui_mainwindow.h" #include "dialog.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_pushButton_clicked() { Dialog dia; QPushButton btn(&dia); btn.setText("accept"); btn.move(20,10); //会关闭 dia 但是返回的值是 1 connect(&btn,SIGNAL(clicked()),&dia,SLOT(accept()));
QPushButton btn1(&dia); btn1.setText("reject"); btn1.move(50,50); //会关闭 dia 但是返回的值是 0 connect(&btn1,SIGNAL(clicked()),&dia,SLOT(reject()));
int rec= dia.exec(); // dia退出的时候就会被销毁; if(rec==Dialog::Accepted){ qDebug()<< "rec=" << rec << " "<< "accept"; }else if(rec==Dialog::Rejected) { qDebug()<< "rec=" << rec << " "<< "reject";
} }
void MainWindow::on_pushButton_2_clicked() { Dialog* dia=new Dialog(this);//指定了父 当父销毁的时候 这个dialog 才会被销毁 不指定父 就会 内存泄漏 dia->setModal(true); // 默认是非模态 设置了model 才是模态 dia->show(); }