知识点:QDialog概述
概念:对话框是GUI程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。
分类:
模态对话框:就是会阻塞同一应用中其他窗口的输入。
非模态对话框:不会阻塞同一应用程序中其他窗口的输入。
所谓标准对话框,是Qt内置的一系列对话框,由于简化开发,因为很多对话框是通用的,这些对话框在所有程序几乎相同,因此没有没有必要再每一个程序中都自己实现。
知识点2:自定义QDialog对话框
- 使用QDialog : : exec()实现应用程序级别的模态对话框。
- 使用QDialog : : open()实现窗口级别的模态对话框。
- 使用QDialog : : show ()实现非模态对话框。
模态对话框:
#include <QDialog> //在使用QDialog是需要包含这个头文件
QDialog dialog; //其中QDialog是一个类
dialog.setWindowTitle(tr("hello,dialog!"));
dialog.exec();
非模态对话框:
注意:
1、对话框创建要在堆上创建。如果在栈上创建对话框会一闪而过。
2、由于对话框的特性(没有parent),可以设置对话框关闭,自动销毁对话框。
知识点3:标准对话框
概念:标准对话框,是Qt内置的一系列对话框,用于简化开发。事实上有很多对话框都是通用的,比如打开文件,设置颜色,打印设置等。这些对话框在所有程序中几乎相同都,因此没有必要在每一个程序中都自己实现这么一个对话框。
- QColorDialog: 选择颜色;
- QFileDialog: 选择文件或者目录;
- QFontDialog: 选择字体;
- QInputDialog: 允许用户输入一个值,并将其值返回;
- QMessageBox: 模态对话框,用于显示信息、询问问题等;
- QPageSetupDialog: 为打印机提供纸张相关的选项;
- QPrintDialog: 打印机配置;
- QPrintPreviewDialog:打印预览;
- QProgressDialog: 显示操作过程。
知识点4:文件对话框
使用文件对话框需要包含以下头文件
#include <QDialog>#include <QDebug>#include <QFileDialog>
打开一个文件
//打开一个文件使用QString
QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件"), //这个是打开文件对话框的标题
"./",
tr("Images (*.png *.xpm *.jpg);Text(*.txt)"));
if(!fileName.isEmpty())
ui->plainTextEdit->appendPlainText(fileName); //将路径添加到文本编辑器中
打开多个文件
//打开多个文件使用QStringlist
QStringList filesName = QFileDialog::getOpenFileNames(
this,
"打开文件", //这个是文件对话框的标题
"/home",
"Images (*.png *.xpm *.jpg)");
for(int i=0;i<filesName.count();i++)
{
qDebug()<<filesName.at(i);
}
总结:
1、文件对话框使用,参考帮助文档手册。
2、getOpenFileName、getOpenFileNames参数:父类对象指针,文件对话框的标题,打开文件路径文件,文件过滤器。
3、文件过滤器的写法:
如果是一个的话:“images(*.png *.xpm *.jpg)”
如果是多个的话:"images(*.png *.xpm *.jpg); ; Text(*.txt)"
知识点5:选择颜色对话框
首先我们要知道选择颜色的对话框是QColorDialog,可以去帮助文档中寻找一些函数
QColorDialog : : getColor:这个函数是用来生成颜色对话框的。
需要包含头文件:#include <QColorDialog>
//点击按钮生成颜色对话框,选择颜色,设置编辑器字体颜色
QPalette pal=ui->plainTextEdit->palette(); //获取现有的调色板palette
QColor iniColor=pal.color(QPalette::Text); //现有的文字颜色
QColor color = QColorDialog::getColor(iniColor,this,"选择颜色");
//判断选择颜色是否有效,如果有效设置编辑器字体颜色
if(color.isValid()){
pal.setColor(QPalette::Text,color);
ui->plainTextEdit->setPalette(pal);
}
总结:
1、颜色对话框使用,参考帮助文档。
2、getColcr生成颜色对话框,返回值是一个颜色变量,如果在颜色对话框选择取消,返回值无效,反之有效。
知识点6:选择字体对话框
QFontDialog : :getFont生成选择字体对话框。 // font 字形的意思 dialog 对话的意思
void MainWindow::on_pushButton_4_clicked()
{
bool ok;
QFont iniFont = ui->plainTextEdit->font(); //获取原有文本框字体。
QFont font = QFontDialog::getFont(&ok, iniFont,this); //如果不知道类型和大小,可以使用上面的方式获取原有的字体,给它
// QFont font = QFontDialog::getFont(&ok, QFont("Times", 12), this); //如果知道类型和大小的话可以这样写
if (ok) { //如果ok=true
ui->plainTextEdit->setFont(font);
}
}
上面的代码时一个选择按钮槽函数,函数内部为选择字体函数。
总结:
1、选择字体对话框使用,参考帮助文档。
2、getFont生成选择字体对话框,返回值不能判断有效,一般是根据getFonr的第一个参数逻辑变量是否为true,来判断是否有效。
知识点7:消息对话框
需要包含头文件#include<QMessageBox>
QMessageBox:用于显示消息提示。我们一般会使用提供的几个static函数:显示关于对话框。
注意:about和aboutQt两个函数是没有返回值的
void MainWindow::on_pushButton_5_clicked()
{
//错误弹窗
//critical中第一个参数表示父类的指针,参数二窗口的标题,参数三:提示信息。
QMessageBox::critical(this,"错误消息对话框","程序出现错误"); //critical:关键的
//警告弹窗
QMessageBox::warning(this,"警告消息对话框","程序出现警告");
//消息弹窗
QMessageBox::information(this,"消息对话框","程序一切正常",QMessageBox::Ok,QMessageBox::NoButton);//后面的两个表示增加的按钮,可加可不加
//消息选择弹窗
QMessageBox::StandardButton result;
result = QMessageBox::question(this,"选择消息框","文件已修改,是否保存",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::NoButton);
if(result==QMessageBox::Yes)
qDebug()<<"正在保存";
else if(result==QMessageBox::No)
qDebug()<<"不保存";
else if(result==QMessageBox::Cancel)
qDebug()<<"取消操作";
}
知识点8:输入对话框
QInputDialog:输入文本/整形数据/浮点型数据........对话框类
需要包含头文件:#include <QInputDialog>
void MainWindow::on_pushButton_6_clicked()
{
//生成输入文字对话框
bool ok;
//第一个参数父类指针,参数二:对话框标题,参数三:输入文字的提示信息,参数四:正常的文字模式,参数五:对话框中默认的提示字 ,参数六:。
QString text = QInputDialog::getText(this, tr("输入文字"),
tr("请输入文字:"), QLineEdit::Normal,
"demo", &ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text); //将输入的内容text写到plainTextEdit上面
}