09 对话框
代码资源:https://download.youkuaiyun.com/download/qq_36926037/85035629
9.1 创建项目
(1)创建一个项目,该项目有一个累继承自QMainWindow类,详细步骤参考:博客:https://blog.youkuaiyun.com/qq_36926037/article/details/123720153
(2)利用界面文件(.ui)创建界面,详细创建步骤参考:博客:https://blog.youkuaiyun.com/qq_36926037/article/details/123663392
创建项目具体步骤参考博客8.1节:https://blog.youkuaiyun.com/qq_36926037/article/details/123687483的7.3节
创建好的项目如图所示:
9.2 模态/非模态对话框
一般通过建立连接(connect)的方式触发对话框,即通过传递信号触发对话框
connect(QAction对象,QAction信号,对话框)
对话框分类:
(1)模态对话框:创建对话框后,不可以对其他窗口进行操作。除非关闭该对话框才能进行其他操作。(具有阻塞功能)
(2)非模态对话框:在创建对话框后,可以对其他的窗口进行操作
9.2.1 模态对话框
模态对话框: 创建对话框后,不可以对其他窗口进行操作。除非关闭该对话框才能进行其他操作。(具有阻塞功能)
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
connect(ui->actionnew,&QAction::triggered,[=]()
{
//模态对话框
QDialog dlg(this);//创建对话框对象并放入对象树
dlg.resize(100,100);
dlg.exec();//模态方式创建对话框
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.2.2 非模态对话框
非模态对话框: 创建对话框后,可以对其他窗口进行操作。
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
//2.2 模态和非模态对话框
connect(ui->actionnew,&QAction::triggered,[=]()
{
//模态对话框
QDialog dlg(this);//创建对话框对象并放入对象树(栈上的对象)
dlg.resize(100,100);
dlg.exec();//模态方式创建对话框
});
connect(ui->actionopen,&QAction::triggered,[=]()
{
//非模态对话框
//QDialog dlg2(this);创建对话框对象并放入对象树
//上述创建的对话框对象在栈上,当Lambda函数使用结束后,窗口对象就会释放,
// 所以对话框瞬间消失,因此为解决问题,需要把对象放在堆上。
QDialog *dlg2=new QDialog(this);
dlg2->resize(100,100);
dlg2->show();//非模态方式创建对话框
dlg2->setAttribute(Qt::WA_DeleteOnClose);
//上述操作,在点击关闭对话框后,对话框对象就会被释放,
// 防止重复创建对象引起内存泄露
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.3 消息对话框
消息对话框:包含四个公有成员函数,实现消息功能(错误、信息、问题、警告)
# include < QMessageBox >
9.3.1 错误对话框
代码:
#include < QMessageBox >
QMessageBox::critical(this,“critical”,“错误”);
参数1:父亲;参数2:对话框标题;参数3:提示信息:
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
//2.2 消息对话框
//#include <QMessageBox>
connect(ui->actionopen,&QAction::triggered,[=]()
{
//(提示)错误对话框
QMessageBox::critical(this,"critical","错误");
//参数1,指向父对象;参数2:消息类型;参数3:消息对话框名称
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.3.2 信息对话框
代码:
#include < QMessageBox >
QMessageBox::information(this,“info”,“信息”);
参数1:父亲;参数2:对话框标题;参数3:提示信息:
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
//2.2 消息对话框
//#include <QMessageBox>
connect(ui->actionopen,&QAction::triggered,[=]()
{
//(提示)错误对话框
//QMessageBox::critical(this,"critical","错误");
//参数1,指向父对象;参数2:消息类型;参数3:消息对话框名称
//(提示)信息对话框
QMessageBox::information(this,"info","信息");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.3.3 问题对话框
代码:
#include < QMessageBox >
QMessageBox::question(this,“ques”,“提问”);
或QMessageBox::question(this,“ques”,“提问”,QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);
参数1:父亲;参数2:对话框标题;参数3:提示信息;参数4:两个选项;参数5:默认关联回车选项
返回值为StandButton类型,可以通过返回值判断用户输入
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
//2.2 消息对话框
//#include <QMessageBox>
connect(ui->actionopen,&QAction::triggered,[=]()
{
//(提示)错误对话框
//QMessageBox::critical(this,"critical","错误");
//参数1,指向父对象;参数2:消息类型;参数3:消息对话框名称
//(提示)信息对话框
//QMessageBox::information(this,"info","信息");
//问题对话框:默认是yes/no两个选项
// QMessageBox::question(this,"ques","提问");
QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,
QMessageBox::Cancel);
// 参数1:父亲,参数2:标题,参数3:提示内容;参数4:两个选项;参数5:默认关联回车选项
if (QMessageBox::Save==QMessageBox::question(this,"ques","提问",
QMessageBox::Save|QMessageBox::Cancel,
QMessageBox::Cancel))
{
qDebug()<<"选择的是保存"<<endl;
}
if (QMessageBox::Cancel==QMessageBox::question(this,"ques","提问",
QMessageBox::Save|QMessageBox::Cancel,
QMessageBox::Cancel))
{
qDebug()<<"选择的是取消"<<endl;
}
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.3.4 警告对话框
代码:
#include < QMessageBox >
QMessageBox::warning(this,“warning”,“警告”);
参数1:父亲;参数2:对话框标题;参数3:提示信息;
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
//2.2 消息对话框
//#include <QMessageBox>
connect(ui->actionopen,&QAction::triggered,[=]()
{
//(提示)错误对话框
//QMessageBox::critical(this,"critical","错误");
//参数1,指向父对象;参数2:消息类型;参数3:消息对话框名称
//(提示)信息对话框
//QMessageBox::information(this,"info","信息");
//问题对话框:默认是yes/no两个选项
// QMessageBox::question(this,"ques","提问");
// QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,
// QMessageBox::Cancel);
// // 参数1:父亲,参数2:标题,参数3:提示内容;参数4:两个选项;参数5:默认关联回车选项
// if (QMessageBox::Save==QMessageBox::question(this,"ques","提问",
// QMessageBox::Save|QMessageBox::Cancel,
// QMessageBox::Cancel))
// {
// qDebug()<<"选择的是保存"<<endl;
// }
// if (QMessageBox::Cancel==QMessageBox::question(this,"ques","提问",
// QMessageBox::Save|QMessageBox::Cancel,
// QMessageBox::Cancel))
// {
// qDebug()<<"选择的是取消"<<endl;
// }
//警告对话框
QMessageBox::warning(this,"warning","警告");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.4 其他标准对话框
标准对话框:是QT内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打卡文件、打印设置等。这些对话框在所有程序中几乎相同,因此没有必要在每一个程序中都自己实现这么一个对话框。Qt内置的标准对话框可以分为以下几类:
(1)QColorDialog:选择颜色
(2)QFileDialog:选择文件或者目录
(3)QFontDialog:选择字体
(4)QInputDialog:允许用户输入一个值,并将其值返回
(5)QMessageBox:模态对话框,用于显示信息、询问问题等
(6)QPageSetupDialog:为打印机提供纸张相关的选项
(7)QPrintDialog:打印机配置
(8)QPrintPreviewDialog:打印预览
(9)QProgressDialog:显示操作过程
9.4.1 颜色对话框
代码:
#include
QColor color=QColorDialog::getColor(QColor(255,0,0));
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
#include <QColorDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
// 2.3 其他一些标准对话框
connect(ui->actionopen,&QAction::triggered,[=]()
{
//颜色对话框
//#include <QColorDialog>
QColor color=QColorDialog::getColor(QColor(255,0,0));
qDebug()<<"r="<<color.red()<<"g="<<color.green()<<" b="<<color.blue();
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.4.2 文件对话框
代码:
#include < QFileDialog >
QString strf=QFileDialog::getOpenFileName(this,“打开文件”,“D:\data”,"(*.rar)");
参数1:父亲;参数2:对话框标题;参数3:文件路径;参数4:过滤条件。返回值为选取的路径
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
#include <QColorDialog>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
// 2.3 其他一些标准对话框
connect(ui->actionopen,&QAction::triggered,[=]()
{
//颜色对话框
//#include <QColorDialog>
// QColor color=QColorDialog::getColor(QColor(255,0,0));
// qDebug()<<"r="<<color.red()<<"g="<<color.green()<<" b="<<color.blue();
//文件对话框
//#include <QFileDialog>
QString strf=QFileDialog::getOpenFileName(this,"打开文件","D:\\data","(*.rar)");//打开文件对话框(只显示rar文件)
// 参数1:父亲;参数2:对话框标题;参数3:文件路径;参数4:过滤条件
// 返回值为选取的路径
qDebug()<<strf<<endl;
});
}
MainWindow::~MainWindow()
{
delete ui;
}
9.4.3 字体对话框
代码:
#include
QFont gf=QFontDialog::getFont(&flag,QFont(“华文仿宋”,36));
#include "mainwindow.h"
#include "ui_mainwindow.h"
//(1)引入对话框头文件
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//(2)通过连接,触发对话框:connect(QAction对象,QAction信号,行为)
// 2.3 其他一些标准对话框
connect(ui->actionopen,&QAction::triggered,[=]()
{
//颜色对话框
//#include <QColorDialog>
// QColor color=QColorDialog::getColor(QColor(255,0,0));
// qDebug()<<"r="<<color.red()<<"g="<<color.green()<<" b="<<color.blue();
//文件对话框
//#include <QFileDialog>
// QString strf=QFileDialog::getOpenFileName(this,"打开文件","D:\\data","(*.rar)");//打开文件对话框(只显示rar文件)
// // 参数1:父亲;参数2:对话框标题;参数3:文件路径;参数4:过滤条件
// // 返回值为选取的路径
// qDebug()<<strf<<endl;
//字体对话框
//#include <QFontDialog>
bool flag;
QFont gf=QFontDialog::getFont(&flag,QFont("华文仿宋",36));
qDebug()<<"字体:"<<gf.family()<<"字号:"<<gf.bold()<<endl;
});
}
MainWindow::~MainWindow()
{
delete ui;
}