一.QDialog概述
概念:对话框是GUI程序中不可或缺的组成成分,很多不能或不适合放入主窗口的功能组件都必须放在对话框中设置。
对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或简洁的用户交互。
模态对话框:会阻塞同一应用程序中其他窗口的输入。
非模态对话框:不会阻塞同一应用程序中其他窗口的输入。
二.自定义对话框创建
头文件:#include<QDialog>
1.模态对话框:
QDialog dia;
dia.setWindowTitle("hello,dialog");
dia.exec();
2.非模态对话框:
①对话框要在堆上创建
②可以设置对话框关闭时自动销毁
QDialog *dia1 = new QDialog;
dia1->setAttribute(Qt::WA_DeleteOnClose);
dia1->setWindowTitle("hello,dialog");
dia1->show();
三.标准对话框
Qt提供了一系列内置的标准对话框,这些对话框可以用于实现各种常见的用户交互任务,从而简化应用程序的开发。以下是一些主要的内置对话框类型:
1. QColorDialog:用于选择颜色。
2. QFileDialog:用于选择文件或目录。
3. QFontDialog:用于选择字体。
4. QInputDialog:允许用户输入一个值,并返回该值。
5. QMessageBox:模态对话框,用于显示信息、询问问题、警告或错误提示。
6. QPageSetupDialog:为打印机提供纸张相关的选项。
7. QPrintDialog:配置打印机。
8. QPrintPreviewDialog:打印预览。
9. QProgressDialog:显示操作过程。
四.文件对话框
1.getOpenFileName和getOpenFileNames的参数:父类对象指针,文件对话框的标题,打开文件路径,文件过滤器。
2.文件过滤器写法:
"Images (*.png *.xpm *.jpg)"
"Images (*.png *.xpm *.jpg) ;; Text(*.txt)"
3.打开文件并将其路径输入文本编辑器中:
头文件要包含: #include<QFileDialog>
resize(600,400);
QPushButton *b1 = new QPushButton("打开一个文件",this);
QPushButton *b2 = new QPushButton("打开多个文件",this);
b1->move(100,100);
b2->move(100,140);
QTextEdit *edit = new QTextEdit("edit",this);
edit->move(220,80);
connect(b1,&QPushButton::clicked,this,[=](){
QString fname = QFileDialog::getOpenFileName(this,
tr("Open File"),
"/E:/anac/Jupyter",
tr("Images (*.png *.xpm *.jpg);;Text(*.txt)"));
edit->append(fname);
});
connect(b2,&QPushButton::clicked,this,[=](){
QStringList fnames = QFileDialog::getOpenFileNames(this,
tr("Open File"),
"/E:/anac/Jupyter",
tr("Images (*.png *.xpm *.jpg)"));
for(int i=0;i<fnames.size();i++)
{
edit->append(fnames[i]);
}
});
五.颜色对话框
1.getColor生成颜色对话框,返回值是一个颜色变量,如果在颜色对话框选择取消,返回值无效,反之则有效。
2.生成颜色对话框,选择颜色,设置编辑器字体颜色:
①获取现有调色板
②获取现有文字颜色
③选择颜色
④判断选择颜色是否有效,如果有效则改变编辑器字体颜色
头文件要包含: #include<QColorDialog>
QPushButton *b3 = new QPushButton("选择颜色",this);
b3->move(100,20);
connect(b3,&QPushButton::clicked,this,[=](){
QPalette pal = edit->palette();
QColor ncolor = pal.color(QPalette::Text);
QColor color = QColorDialog::getColor(ncolor,this,"choose color");
if(color.isValid()){
pal.setColor(QPalette::Text,color);
edit->setPalette(pal);
}
});
六.选择字体对话框
1.getFont生成选择字体对话框,不能直接判断是否有效,一般根据getFont的第一个参数逻辑变量是否为True来判断。
2.生成选择字体对话框,选择字体,设置编辑器字体:
①设置逻辑变量
②获取现有文本框字体
③选择字体
④判断选择字体是否有效,如果有效则改变编辑器字体
头文件要包含: #include<QFontDialog>
QPushButton *b4 = new QPushButton("选择字体",this);
b4->move(100,60);
connect(b4,&QPushButton::clicked,this,[=](){
bool ok;
QFont nowfont = edit->font();
QFont font = QFontDialog::getFont(&ok,nowfont,this);
if(ok){
edit->setFont(font);
}
});
七.消息对话框
QMessageBox生成消息对话框:
头文件要包含: #include<QMessageBox>
QPushButton *b5 = new QPushButton("消息对话",this);
b5->move(100,180);
connect(b5,&QPushButton::clicked,this,[=](){
//QMessageBox::critical(this,"error","程序错误");
//QMessageBox::warning(this,"warning","程序警告");
//QMessageBox::information(this,"message","程序正常");
//QMessageBox::about(this,"name","内容"); //自定义消息框
//QMessageBox::aboutQt(this,"aboutQt");
QMessageBox::StandardButton res;
res = QMessageBox::question(this,"提示消息框","文件已修改,是否保存",
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel|QMessageBox::NoButton);
if(res == QMessageBox::Yes)
qDebug()<<"已保存";
else if(res == QMessageBox::No)
qDebug()<<"不保存";
else
qDebug()<<"取消操作";
});
八.输入对话框
QInputDialog:输入文本/整形数据/浮点型数据…对话框
1.生成输入文字对话框:
头文件要包含: #include<QInputDialog>
QPushButton *b6 = new QPushButton("输入",this);
b6->move(100,220);
connect(b6,&QPushButton::clicked,this,[=](){
QString text = QInputDialog::getText(this,"文本对话框","请输入内容");
if(!text.isEmpty())
edit->append(text);
});