模态和非模态对话框
代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDialog"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮后 弹出对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//对话框 分类
//模态对话框(不可以对其他窗口操作) 非模态对话框(可以对其窗口进行操作)
// //模态创建
// QDialog dlg(this);
// dlg.resize(600,400);
// dlg.exec();
// //对话框×掉后才会打印
// qDebug() << "对话框弹出了";
//非模态创建
//这种方式创建的对话框在匿名函数执行完成后就会自动关闭掉
//QDialog dlg2(this)
//使用new 的方式放入堆栈中,函数执行完也不会关闭
//但是会存在问题就是一个人闲得无聊一直点击然后关闭,又不关闭主窗口,内存就不会释放掉,可能造成内存泄漏 需要使用setAttribute(Qt::WA_DeleteOnClose);
QDialog *dlg2 = new QDialog(this);
dlg2->resize(600,400);
dlg2->show();
//对话框关闭后释放掉对象
dlg2->setAttribute(Qt::WA_DeleteOnClose);
//对话框弹出后就会打印
qDebug() << "非模态对话框弹出了";
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行
标准对话框
Qt内置的标准对话框大致分为以下几类
QColorDialog | 选择颜色 |
QFileDialog | 选择文件或目录 |
QFontDialog | 选择字体 |
QInputDialog | 允许用户输入一个值,并将其值 返回 |
QMessageDialog | 模态对话框,用于显示信息、询问问题等 |
QPageSetupDialog | 为打印机提供纸张选项相关的选项 |
QPrintDialog | 打印机配置 |
QPrintPreviewDialog | 打印机预览 |
QProgressDialog | 显示操作过程 |
自定义消息框
代码
//消息对框框
//错误对话框 参数1 父类 参数2 标题 参数3 显示信息
QMessageBox::critical(this,"critical","错误");
//信息对话框
QMessageBox::information(this,"info","消息");
//提问对话框 参数4 指定按钮显示 参数5 指定默认选中的按钮
//QMessageBox::question(this,"ques","问题",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);
if(QMessageBox::Save==QMessageBox::question(this,"ques","问题",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
qDebug() << "选择了保存";
}
else
{
qDebug() << "选择了取消";
}
//警告对话框
QMessageBox::warning(this,"warn","警告");
运行
其他标准对话框
代码
//其他标准对话框
//颜色对话框 颜色参数默认是(255,0,0)红色
QColor color = QColorDialog::getColor(QColor(255,0,0));
qDebug() << "r=" << color.red() << "g=" << color.green() << "b=" << color.blue();
//文件对话框
//参数1 父亲 参数2 标题 参数3 默认打开的路径(不设置默认当前项目) 参数4过滤文件格式
QString str = QFileDialog::getOpenFileName(this,"打开文件","E:/Qt_Study/bilibili","(*.txt)");
qDebug() << str;
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug() << "字体:" << font.family().toUtf8().data() << "字号:" << font.pointSize() << "是否加粗:" << font.bold() << "是否倾斜:" << font.italic();
运行