Qt学习笔记—QDialog对话框


前言

本篇文章主要讲QDialog对话框以及QMessageBox和QFileDialog

一、QDialog模态和非模态?

说明:模态是指打开对话框后无法操作主程序的其他界面,必须先处理对话框。非模态是指可以处理主程序的其他内容,不必先处理对话框。下面我通过具体例子演示:

首先创建UI界面,如下;
在这里插入图片描述
创建好后,将Model和NonModel转到槽,在连接信号与槽:

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

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

    // 信号与槽:connect(object1, SIGNAL(signal), object2, SLOT(slot))
    connect(ui->actionModel, SIGNAL(triggered()), this, SLOT(dialog_Model()));
    connect(ui->actionNoModel, SIGNAL(triggered()), this, SLOT(dialog_NoModel()));
}

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

// dialog_model 槽函数
void MainWindow::dialog_Model()
{
    QDialog dia_model(this);
    qDebug() << "hello dialog_model";

    // Model 使用exec,模态对话框,(弹出对话框后,必须对此对话框进行操作,否则不能操作其他同程序的页面)
    dia_model.exec();
}

// dialog_nomodel 槽函数
void MainWindow::dialog_NoModel()
{
    QDialog *dia_nomodel = new QDialog(this);
    // 关闭对话框时自动释放内存
    dia_nomodel->setAttribute(Qt::WA_DeleteOnClose);

    // NoModel 使用show,非模态对话框,(弹出对话框,不是必须对次进行操作)
    dia_nomodel->show();
    qDebug() << "hello dialog_nomodel";

}

需要注意的是,模态和非模态创建对象的方法不同,在创建非模态时,还需要设置对话框关闭后内存自动释放,不然容易造成内存使用增大。

使用如下代码释放内存
dia_nomodel->setAttribute(Qt::WA_DeleteOnClose);

二、QMessageBox消息对话框

说明:消息对话框主要有:错误,警告,信息,问题等。
下面我主要讲这四个

1.错误(critical)

还是需要创建UI界面,创建好后,将其转到槽,以下其他三种都需要

// 这里我只写槽函数
void MainWindow::on_actionCritical_triggered()
{
    // 返回值为int
    QMessageBox::critical(this, "错误", "critical");
}

注意这里不需要new一个对象,返回值为int型,可以通过返回值判断是否正确执行,在Qt的帮助文档中有。

在这里插入图片描述

2.警告(warning)

代码如下:

void MainWindow::on_actionWarning_triggered()
{

    // 返回值为int
    QMessageBox::warning(this, "警告", "warning");
}

跟critical是差不多的

在这里插入图片描述

3.信息(information)

跟上面两种差不多

void MainWindow::on_actionInfo_triggered()
{
    // 返回值为int
    QMessageBox::information(this, "信息", "information");
}

在这里插入图片描述

4.问题(question)

这里是引用

void MainWindow::on_actionQuestion_triggered()
{
    // 返回值为int类型
    if (QMessageBox::Ok == QMessageBox::question(this, "问题", "你有对象吗?",
                          QMessageBox::Ok | QMessageBox::Cancel))
    {
        qDebug() << "返回了ok";
    }
    else {
        qDebug() << "返回了cancel";
    }


}

可以自定义问题的内容以及按钮,以上三种也能自定义按钮,每个按钮的返回值都不一样,可以查Qt文档查看。这里我们将按下的按钮返回值与其进行判断,方便观察。

在这里插入图片描述

说明一下:以上四种对话框都是模态的

三、QFileDialog文件对话框

文件对话框有很多种操作(如保存,打开等),我主要将打开操作

void MainWindow::on_actionQFileDialog_triggered()
{
    QFileDialog::getOpenFileName(this, "打开文件");
}

第三个参数是可以设置路径,第四个参数可以设置选择文件格式(如:png, jpg, doc, all),这里我没有演示
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值