QT学习笔记(五):Qt5的8种标准对话框示例

前言

QT 提供了常用的对话框类型,他们全部继承自QDialog类,并增加了自己的特色功能,比如颜色选择对话框、文件对话框、字体对话框、输入对话框、消息对框、错误信息对话框、进度对话框、向导对话框等,用户无需再自己设计这些常用的对话框,这样可以减少程序设计工作量。

实例展示

main.cpp 代码:

#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.setWindowTitle(QStringLiteral("八种标准对话框展示"));
    w.show();
    return a.exec();
}

mywidget.h 代码:

#include <QWidget>
class QErrorMessage; 					// 错误信息对话框类 前置声明
#include <QWizard>

namespace Ui 
{
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();
private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_8_clicked();
private:
    Ui::MyWidget *ui;
    QErrorMessage *errordlg;
    QWizardPage *createPage1();        // 新添加
    QWizardPage *createPage2();        // 新添加
    QWizardPage *createPage3();        // 新添加
};

mywidget.cpp 头文件包含:

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDebug>				// 调试函数 头文件
#include <QColorDialog> 		// 1.颜色对话框 头文件
#include <QFileDialog>			// 2.文件对话框 头文件
#include <QFontDialog>			// 3.字体对话框 头文件
#include <QInputDialog>			// 4.输入对话框 头文件
#include <QMessageBox>			// 5.消息色对话框 头文件
#include <QProgressDialog>		// 6.进度条对话框 头文件	
#include <QErrorMessage>		// 7.错误信息对话框 头文件

运行界面展示:
在这里插入图片描述

1.颜色对话框

1)信号槽

// 颜色对话框
void MyWidget::on_pushButton_clicked()
{
        // 创建颜色对话框 并获取颜色(直接使用类的静态函数 获取color)
//    QColor color = QColorDialog::getColor(Qt::red, this, tr("颜色对话框"),QColorDialog::ShowAlphaChannel);
		
		// 创建颜色对话框对象
    QColorDialog dialog(Qt::red, this);                          // 创建对象
    dialog.setOption(QColorDialog::ShowAlphaChannel);            // 显示alpha选项
    dialog.exec();                                               // 以模态方式运行对话框
    QColor color = dialog.currentColor();                        // 获取当前颜色

    qDebug() << "color: " << color;								 // 调试信息输出
}

2)显示
在这里插入图片描述

2.文件对话框

1)信号槽

// 文件对话框
void MyWidget::on_pushButton_2_clicked()
{
        // 1、创建文件对话框 并获取文件名(直接使用类的静态函数 fileName)
        // getOpenFileName() 获取单个文件
//    QString fileName = QFileDialog::getOpenFileName(this, tr("文件对话框"),"D:", tr("图片文件(*.png *.jpg *.jpeg *.bmp *.tif *.tiff);;所有文件(*)"));
//    qDebug()<< "单个fileNames:" << fileName;

        // 2、getOpenFileNames() 获取多个文件
    QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),"D:", tr("图片文件(*.png *.jpg *.jpeg *.bmp *.tif *.tiff);;所有文件(*)"));
    for (int i =0; i<fileNames.length();i++) // 逐行显示文件路径名
    {
    qDebug()<< "多个fileNames["<<i+1<<"]:"<< fileNames[i];
     }
     
     	// 3、创建保存文件对话框 并获取保存的文件名(直接使用类的静态函数 fileName)
	QString filename = QFileDialog::getSaveFileName(this,tr("保存对话框"),"D:",tr("*.bmp;; *.png;; *.jpg;; *.tif;; *.GIF"));
		
}

保存文件对话框设置代码:

QFileDialog *fileDialog = new QFileDialog(this);//创建一个QFileDialog对象,构造函数中的参数可以有所添加。
fileDialog->setWindowTitle(tr("Save As"));//设置文件保存对话框的标题
fileDialog->setAcceptMode(QFileDialog::AcceptSave);//设置文件对话框为保存模式
fileDialog->setFileMode(QFileDialog::AnyFile);//设置文件对话框弹出的时候显示任何文件,不论是文件夹还是文件
fileDialog->setViewMode(QFileDialog::Detail);//文件以详细的形式显示,显示文件名,大小,创建日期等信息;
//还有另一种形式QFileDialog::List,这个只是把文件的文件名以列表的形式显示出来
fileDialog->setGeometry(10,30,300,200);//设置文件对话框的显示位置
fileDialog->setDirectory(".");//设置文件对话框打开时初始打开的位置
fileDialog->setFilter(tr("Image Files(*.jpg *.png)"));//设置文件类型过滤器

//注意使用的是QFileDialog::Accepted或者QDialog::Accepted,不是QFileDialog::Accept
if(fileDialog->exec() == QDialog::Accepted) // 对话框确定按钮被按下
{
    QString path = fileDialog->selectedFiles()[0];//得到用户选择的文件名
    filePath=listWidget_File->item(listWidget_File->currentRow())->text();//这个是得到在ListWidget中点击查看的图片,得到这个图片的名字
    filePath=QString("/media/sd/PICTURES")+filePath;//将路径和文件名连接起来
    QImage iim(filePath);//创建一个图片对象,存储源图片
    QPainter painter(&iim);//设置绘画设备
    QFile file(path);//创建一个文件对象,存储用户选择的文件
    if (!file.open(QIODevice::ReadWrite))//以只读的方式打开用户选择的文件,如果失败则返回
    {
        return;
    }    
 }
 //以流方式写入文件
    QByteArray ba;
    QBuffer buffer(&ba);
    buffer.open(QIODevice::WriteOnly);
    iim.save(&buffer, "JPG");//把图片以流方式写入文件缓存流中
    file.write(ba);//将流中的图片写入文件对象当中

在这里插入图片描述
2)

3.字体对话框

1)信号槽

// 字体对话框
void MyWidget::on_pushButton_3_clicked()
{
    // ok用于标记是否按下了“OK”按钮
    bool ok;
    QFont font = QFontDialog::getFont(&ok, this);
    // 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体
    // 如果按下“Cancel”按钮,那么输出信息
    if (ok)
        ui->pushButton_3->setFont(font);
    else
        qDebug() << tr("没有选择字体,使用默认字体!");
}

2)显示
在这里插入图片描述

4.输入对话框

1)信号槽

// 输入对话框
void MyWidget::on_pushButton_4_clicked()
{
    bool ok;
    // 获取字符串
    QString string = QInputDialog::getText(this, tr("输入字符串对话框"),tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
    if(ok)
        qDebug() << "string:" << string;

    // 获取整数
    int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
    if(ok)
        qDebug() << "value1:" << value1;

    // 获取浮点数
    double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
    if(ok)
        qDebug() << "value2:" << value2;

    // 获取条目
    QStringList items;
    items << tr("条目1") << tr("条目2")<< tr("条目3")<< tr("条目4");
    QString item = QInputDialog::getItem(this, tr("输入条目对话框"),tr("请选择或输入一个条目"), items, 0, true, &ok);
    if(ok)
        qDebug() << "item:" << item;
}

2)显示
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.消息对框

1)信号槽

// 消息对话框
void MyWidget::on_pushButton_5_clicked()
{
    // 问题对话框
    int ret1 = QMessageBox::question(this, tr("问题对话框"),tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);
    if(ret1 == QMessageBox::Yes)
        qDebug() << tr("问题!");

    // 提示对话框
    int ret2 = QMessageBox::information(this, tr("提示对话框"),tr("这是Qt书籍!"), QMessageBox::Ok);
    if(ret2 == QMessageBox::Ok)
        qDebug() << tr("提示!");

    // 警告对话框
    int ret3 = QMessageBox::warning(this, tr("警告对话框"),tr("不能提前结束!"), QMessageBox::Abort);
    if(ret3 == QMessageBox::Abort)
        qDebug() << tr("警告!");

    // 错误对话框
    int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);
    if(ret4 == QMessageBox::YesAll)
        qDebug() << tr("错误");

    // 关于对话框
    QMessageBox::about(this, tr("关于对话框"), tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));
}

2)显示
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.进度对话框

1)信号槽

// 进度对话框
void MyWidget::on_pushButton_6_clicked()
{
    QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
    dialog.setWindowTitle(tr("进度对话框"));                           // 设置窗口标题
    dialog.setWindowModality(Qt::WindowModal);                // 将对话框设置为模态
    dialog.show();

    for(int i=0; i<50000; i++)                                                // 演示复制进度
    {
        dialog.setValue(i);                                                         // 设置进度条的当前值(使进度条推进)
        QCoreApplication::processEvents();                              // 避免界面冻结
        if(dialog.wasCanceled())                                                // 按下取消按钮则中断
            break;
    }
    dialog.setValue(50000);    // 这样才能显示100%,因为for循环中少加了一个数
    qDebug() << tr("复制结束!");
}

2)显示结果
在这里插入图片描述

7.错误信息对话框

1)mywidget.h 成员变量添加:

private:
	QErrorMessage *errordlg;

2)mywidget.cpp 构造函数 MyWidget::MyWidget() 添加:

MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{
    errordlg = new QErrorMessage(this); // 添加
}

3)信号槽

// 错误信息对话框
void MyWidget::on_pushButton_7_clicked()
{
    errordlg->setWindowTitle(tr("错误信息对话框"));
    errordlg->showMessage(tr("这里是出错信息!"));
}

4)显示
在这里插入图片描述

8.向导对话框.

1)定义3个返回值为 QWizardPage 类对象指针的函数 createPage1(),createPage2(),createPage3():

// 向导页面1 创建函数
QWizardPage * MyWidget::createPage1()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
// 向导页面2
QWizardPage * MyWidget::createPage2()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("用户选择信息"));
    return page;
}
// 向导页面3
QWizardPage * MyWidget::createPage3()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}

2)信号槽

// 向导对话框
void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());     // 添加向导页面
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

3)显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值