Qt笔记9_QDialog(对话框)

一. 模态对话框

1.1 了解模态对话框

        模态对话框是指在它显示期间,它会阻止用户与程序中其他窗口进行交互的对话框。用户必须先关闭模态对话框,才能继续操作其他窗口。

模态对话框可以通过以下几种方式实现:

  1. 应用程序模态(Application Modal):这种模态对话框会阻塞整个应用程序的所有窗口。使用QDialog::exec()方法来显示应用程序模态对话框。

  2. 窗口模态(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 了解非模态对话框

        创建非模态对话框与模态对话框类似,但它们的行为有所不同。非模态对话框在显示时不会阻塞程序的执行,允许用户与对话框以及其他窗口进行交互。

以下是创建和显示非模态对话框的步骤:

  1. 创建对话框对象,但不调用 exec() 方法。
  2. 使用 show() 方法显示对话框。
  3. 程序继续执行,无需等待对话框关闭。

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值