Qt_对话框QDialog的介绍

目录

1、新建项目对话框 

2、非模态对话框 

3、模态对话框

4、自定义对话框 

5、Qt内置对话框

5.1 消息对话框QMessageBox 

5.2 颜色对话框QColorDialog

5.3 文件对话框QFileDialog

5.4 字体对话框QFontDialog

5.5 输入对话框QInputDialog 

结语 


前言:

        在Qt中,对话框是图形化界面不可缺少的一部分,他的类是QDialog。对话框的作用是让用户处理临时、简洁的任务,通常让用户进行一些选择。对话框本质也是一个独立的窗口,他分为两类:1、模态对话框,2、非模态对话框。Qt中内置一些可以直接用的对话框,常用的有以下几种:QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog (字体对话框)、QInputDialog (输⼊对话框)和 QMessageBox(消息框)。当然还允许开发者继承QDialog类实现自定义对话框。

1、新建项目对话框 

        在Qt Creator中,可以在新建项目中选择新建QDialog类,如下图:

        新建完成后,运行程序可以得到一个界面,该界面的右上角有一个问号,表示该界面是对话框的基础界面:

        但是以上新建QDialog项目的做法是没有意义的,因为实际运用中对话框是以子窗口的身份出现在程序中的,往往是在主窗口中执行了某种逻辑,这时候才会跳出对话框,而上述将对话框作为主窗口则体现不出对话框的作用。因此下文的例子是在主窗口QMainWindow中通过new的形式,创建一个QDialog对象作为子窗口。

2、非模态对话框 

        非模态对话框是一种模式,表示对话框创建出来时不会限制用户对主窗口的操作,通俗来说,用户可以在对话框和主窗口之间进行切换,将这种模式称为非阻塞对话框。调用QDialog里的show()函数实现非模态对话框。

        实现一个按钮,只要该按钮被按下,则就会创建一个新的对话框,在QMainWindow.cpp实现代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    //创建对话框
    QDialog* dialog = new QDialog(this);
    //采用非模态
    dialog->show();
}

        运行结果:

        可以看到能够正常创建对话框,但是上述代码有一个问题:如果关闭了对话框,是不会自动释放该对话框对象的,如果在一个主窗口中点击了多次按钮,就会一直创建新的对话框对象,从而导致内存泄漏。解决方法是设置 Qt:WA_DeleteOnClose 属性,写法如下:

void MainWindow::on_pushButton_clicked()
{
    //创建对话框
    QDialog* dialog = new QDialog(this);
    //采用非模态
    dialog->show();
    //效果为:关闭对话框时自动调用delete进行释放
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}

3、模态对话框

        模态对话框表示弹出对话框时,用户只能在该对话框里进行操作,无法在该对话框存在的情况下去操作主窗口。使用模态对话框非常简单,将上述的show方法改成exec方法即可,代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    //创建对话框
    QDialog* dialog = new QDialog(this);
    //采用模态
    dialog->exec();
    //关闭对话框时自动调用delete进行释放
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}

        运行结果:

4、自定义对话框 

        上述例子中的对话框仅仅只是一个窗口,无法添加任何控件,而一个完整的对话框是要有自己的控件的,这样才能与用户进行交互,若要实现在对话框中加入控件,方法之一就是自定义一个继承QDialog的类,然后在该类的构造函数中new出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安权_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值