一. 模态对话框
1.1 了解模态对话框
模态对话框是指在它显示期间,它会阻止用户与程序中其他窗口进行交互的对话框。用户必须先关闭模态对话框,才能继续操作其他窗口。
模态对话框可以通过以下几种方式实现:
-
应用程序模态(Application Modal):这种模态对话框会阻塞整个应用程序的所有窗口。使用
QDialog::exec()
方法来显示应用程序模态对话框。 -
窗口模态(Window Modal):这种模态对话框只阻塞与它关联的窗口。使用
QDialog::exec()
方法并在构造函数中指定父窗口来显示窗口模态对话框。
1.2 创建一个模态窗口
第一步,按照以前学习的方式创建一个新的项目。
注意,此次代码在 .cpp 中编译
#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(300,300);
dlg.exec();
qDebug() << "模态对话框";
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:点击QDialog意外的地方,系统将会有警告。
二. 非模态对话框
1.1 了解非模态对话框
创建非模态对话框与模态对话框类似,但它们的行为有所不同。非模态对话框在显示时不会阻塞程序的执行,允许用户与对话框以及其他窗口进行交互。
以下是创建和显示非模态对话框的步骤:
- 创建对话框对象,但不调用
exec()
方法。 - 使用
show()
方法显示对话框。 - 程序继续执行,无需等待对话框关闭。
2.2 创建一个非模态对话框
#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 *dlg2 = new QDialog (this);
dlg2->resize(300,300); //固定打开大小
dlg2->show(); //以顶层显示
dlg2->setAttribute(Qt::WA_DeleteOnClose);//55号,属性
qDebug() << "非模态对话框 ";
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:此时可以点击窗口以外
三. 消息对话框
3.1 错误对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//错误对话框
QMessageBox::critical(this,"critical","错误");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
3.2 信息对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//信息对话框
QMessageBox::information(this,"info","信息");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
3.3 警告对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//警告对话框
QMessageBox::warning(this,"waring","警告");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
四. 提问对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//参数1:父亲,参数2:标题,参数3:提示内容,参数4:按键类型,参数5:默认关联回车按键
if (QMessageBox::Save == QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
qDebug() << "选择保持";
}
else
{
qDebug() << "选择取消";
}
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
五. 颜色的对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QCollator>
#include <QColorDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//颜色的对话框
QColor color = QColorDialog::getColor(QColor(255,0,0));
qDebug() << "r = " << color.red() << "q = " <<color.green() << "b = " << color.blue();
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
六. 文件对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QCollator>
#include <QColorDialog>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//文件对话框
//参数1:父亲 , 参数2:标题 , 参数3:默认打开路径 , 参数4:过滤文件格式
//返回值是 选取的路径
QString str = QFileDialog::getOpenFileName(this,"打开文件","D:\\word\\学习\\作业集\\大创\\大创期末作业","(*.docx)");
qDebug() << str;
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
七. 字体对话框
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QCollator>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("隶书",36));//它需要一个bool值->flag,后面这个是默认打开的flag,也可以不设置
qDebug() << "字体"<<font.family().toUtf8().data() << "字号"<<font.pointSize() << "是否加粗"<<font.bold() << "是否倾斜"<<font.italic();
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果:
有时候得看电脑配置,有时候电脑配置是没有加粗和倾斜的。
八. 总的全部代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QCollator>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//模态创建
// QDialog dlg(this);
// dlg.resize(300,300);
// dlg.exec();
// qDebug() << "模态对话框";
//非模态对话框
// QDialog *dlg2 = new QDialog (this);
// dlg2->resize(300,300);
// dlg2->show();
// dlg2->setAttribute(Qt::WA_DeleteOnClose);//55号,属性
// qDebug() << "非模态对话框 ";
//消息对话框(系统提供的对话框)
//错误对话框
// QMessageBox::critical(this,"critical","错误");
// 信息对话框
// QMessageBox::information(this,"info","信息");
//警告对话框
// QMessageBox::warning(this,"waring","警告");
//提问对话框
//参数1:父亲,参数2:标题,参数3:提示内容,参数4:按键类型,参数5:默认关联回车按键
// if (QMessageBox::Save == QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
// {
// qDebug() << "选择保持";
// }
// else
// {
// qDebug() << "选择取消";
// }
//其他标准对话框
//颜色的对话框
// QColor color = QColorDialog::getColor(QColor(255,0,0));
// qDebug() << "r = " << color.red() << "q = " <<color.green() << "b = " << color.blue();
//文件对话框
//参数1:父亲,参数2:标题,参数3:默认打开路径,参数4:过滤文件格式
//返回值是 选取的路径
// QString str = QFileDialog::getOpenFileName(this,"打开文件","D:\\word\\学习\\作业集\\大创\\大创期末作业","(*.docx)");
// qDebug() << str;
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("隶书",36));//它需要一个bool值->flag,后面这个是默认打开的flag,也可以不设置
qDebug() << "字体"<<font.family().toUtf8().data() << "字号"<<font.pointSize() << "是否加粗"<<font.bold() << "是否倾斜"<<font.italic();
});
}
MainWindow::~MainWindow()
{
delete ui;
}