模态与非模态对话框
模态就是这个对话框弹出来后,不能对其他窗口进行操作,相反的,对于非模态对话框,打开后可以对其他窗口进行操作。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
QDialog dialog0(this);//不要用new,点几下来几个对话框,到全部关闭后才释放,占资源
dialog0.resize(200,200);
dialog0.exec();//阻塞,模态的,但是如果加了调用了show()函数就变成了非模态的了
});
connect(ui->pushButton_2,&QPushButton::clicked,this,[=](){
//方式一
// QDialog dialog0(this);
// dialog0.resize(200,200);
// dialog0.show();//加了show就变成了非模态的
// dialog0.exec();
//方式二
QDialog *dialog0=new QDialog(this);//这里用new应为后面会在对话框关闭后释放
dialog0->resize(200,200);
dialog0->show();
dialog0->setAttribute(Qt::WA_DeleteOnClose);//对话框关闭后会释放对话框
});
}
MainWindow::~MainWindow()
{
delete ui;
}
文件,颜色,文字对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QDialog>
#include<QFileDialog>
#include<QString>
#include<QDebug>
#include<QColorDialog>
#include<QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
QDialog dialog0(this);//不要用new,点几下来几个对话框,到全部关闭后才释放,占资源
dialog0.resize(200,200);
dialog0.exec();//阻塞,模态的,但是如果加了调用了show()函数就变成了非模态的了
});
connect(ui->pushButton_2,&QPushButton::clicked,this,[=](){
//方式一
// QDialog dialog0(this);
// dialog0.resize(200,200);
// dialog0.show();//加了show就变成了非模态的
// dialog0.exec();
//方式二
QDialog *dialog0=new QDialog(this);//这里用new应为后面会在对话框关闭后释放
dialog0->resize(200,200);
dialog0->show();
dialog0->setAttribute(Qt::WA_DeleteOnClose);//对话框关闭后会释放对话框
});
//文件对话框
connect(ui->pushButton_3,&QPushButton::clicked,this,[=](){
//getOpenFileName参数:父类,窗口名,默认打开的目录,筛选出的条件
QString string=QFileDialog::getOpenFileName(this,"打开文件","C:\\User\\19583\\Desktop","*.txt");//getOpenFileName是静态成员函数,所以可以用类名直接调用
qDebug()<<string;
});
//颜色对话框
connect(ui->pushButton_4,&QPushButton::clicked,this,[=]()->void{
auto color=QColorDialog::getColor(Qt::blue,this,"颜色"); //也是静态成员函数,参数不讲了
qDebug()<<color;
});
//文字对话框
connect(ui->pushButton_5,&QPushButton::clicked,this,[=]()->void{
bool bl=true;
QFont font=QFontDialog::getFont(&bl);//传入bool类型的指针,很奇怪
});
}
MainWindow::~MainWindow()
{
delete ui;
}
上面的模态,非模态代码没删,放到一起了
总结,这三个用静态成员函数一般就就够用了,不用实例化。