第19课 QT中的标准对话框(上)

1、标准对话框

    1.1、 Qt为开发中提供了一下 可复用的对话框类型
    1.2、 Qt提供的可复用对话框类型 全部继承自QDialog类
                



1.3、 Qt中的标准对话框 遵循相同的使用方式
        


2、消息对话框

    2.1、 消息对话框是程序中 最常用的界面元素
    2.2、 消息对话框主要用于
        2.2.1、 为用户提示重要信息
        2.2.2、 强制用户进行操作选择
                        

    2.3、 消息对话框是使用方式
            

2.4、 QMessageBox中的实用函数(里面有多个参数,一个函数直接创建某个类型的对话框)

3、文件对话框

    3.1、 文件对话框常用于以下情形
        3.1.1、 Open Mode: 用于程序需要 打开一个外部文件
    3.2、 Save Mode: 应用程序需要 将当前内容 存储于用户 指定的外部文件中
    3.3、 文件对话框的使用方式
            

    3.4、文件类型过滤器
        3.4.1、 在文件对话框可以 根据文件后缀 定义过滤器
        3.4.2、 过滤器定义规则
            

    3.5、 QFileDialog中的实用函数
                
        
widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include <QtGui/QWidget>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
private:
    QPushButton SimpleMsgBtn;
    QPushButton CustomMsgBtn;
    QPushButton OpenFileBtn;
    QPushButton SaveFileBtn;

private slots://槽函数,消息处理函数。
    void SimpleMsgBtn_Clicked();
    void CustomMsgBtn_Clicked();
    void OpenFileBtn_Clicked();
    void SaveFileBtn_Clicked();
    
public:
    Widget(QWidget *parent = 0);    //构造函数
    ~Widget();
};

#endif // WIDGET_H


widget.cpp

#include "widget.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>
#include <QStringList>

Widget::Widget(QWidget *parent)
    : QWidget(parent), SimpleMsgBtn(this), CustomMsgBtn(this), OpenFileBtn(this), SaveFileBtn(this)
{
    SimpleMsgBtn.setText("SimpleMsgBtn");
    SimpleMsgBtn.move(20, 20);
    SimpleMsgBtn.resize(160, 30);

    CustomMsgBtn.setText("Custom MessageBtn");
    CustomMsgBtn.move(20, 70);
    CustomMsgBtn.resize(160, 30);

    OpenFileBtn.setText("OpenFileDialog");
    OpenFileBtn.move(20, 120);
    OpenFileBtn.resize(160, 30);

    SaveFileBtn.setText("SaveFileDialog");
    SaveFileBtn.move(20, 170);
    SaveFileBtn.resize(160, 30);

    resize(200, 200);
    setFixedSize(200, 220);//固定窗口大小。

    connect(&SimpleMsgBtn, SIGNAL(clicked()), this, SLOT(SimpleMsgBtn_Clicked()));
    connect(&CustomMsgBtn, SIGNAL(clicked()), this, SLOT(CustomMsgBtn_Clicked()));
    connect(&OpenFileBtn, SIGNAL(clicked()), this, SLOT(OpenFileBtn_Clicked()));
    connect(&SaveFileBtn, SIGNAL(clicked()), this, SLOT(SaveFileBtn_Clicked()));
}
//实现这些槽函数。
void Widget::SimpleMsgBtn_Clicked()
{
    QMessageBox msg(this);//this指的是当前对话框的父窗口,有父类对象管理子类的生命周期。

    msg.setText("SimpleMsgBtn");//2、设置

    msg.exec();     //3,显示,阻塞式的
}

void Widget::CustomMsgBtn_Clicked()
{
    QMessageBox msg(this);  //1、定义

    msg.setWindowTitle("CustomMsgBtn");//2、设置
    msg.setText("This a detail MessageBox");
    msg.setIcon(QMessageBox::Information);//设置图标
    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel |QMessageBox::Close);

    //下面一句相当于前面五句
    //int ret = QMessageBox::information(this, "CustomMsgBtn", "This a detail MessageBox" , QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::Close);

    int ret = msg.exec();
    if(ret == QMessageBox::Ok)//3、显示
    {
        qDebug() << "ok is clicked";
    }
    else if(ret == QMessageBox::Close)//3、显示
    {
        qDebug() << "ok is Close";
    }
    else if(ret == QMessageBox::Cancel)
    {
        qDebug() << "ok is Cancel";
    }

}

void Widget::OpenFileBtn_Clicked()
{
    QFileDialog dlg(this);//1、 定义

    dlg.setAcceptMode(QFileDialog::AcceptOpen);//2、设置,打开文件。
    dlg.setNameFilter("Images (*.png *.xpm *.jpg);; Text files (*.txt);; XML files (*.xml);;All(*.*)");//过滤器

    dlg.setFileMode(QFileDialog::ExistingFiles);//注意ExistingFiles加s表示可以打开多个文件。

    if(dlg.exec() == QFileDialog::Accepted)//显示,这是用户操作成功的返回值。
    {
        QStringList list = dlg.selectedFiles();//字符串列表
        for(int i=0; i<list.count(); i++)
        {
            qDebug() << list[i];    //每一个字符串就是一条路径。
        }
    }
}

void Widget::SaveFileBtn_Clicked()
{
    QFileDialog dlg(this); // 1、定义

    dlg.setAcceptMode(QFileDialog::AcceptSave);//2、设置保存文件的更改。
    dlg.setNameFilter("Images (*.png *.xpm *.jpg);; Text files (*.txt);; XML files (*.xml);;All(*.*)");

    dlg.setFileMode(QFileDialog::ExistingFiles);//注意加s表示可以打开多个文件。

    if(dlg.exec() == QFileDialog::Accepted)//3、显示
    {
        QStringList list = dlg.selectedFiles();
        for(int i=0; i<list.count(); i++)
            qDebug() << list[i];
    }
}

Widget::~Widget()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}


4、小结

    4.1、 Qt中提供了多个 可复用的对话框类型
A、 继承QDialog类型
B、 遵循相同的使用方式
    4.2、 QMessageBox 用于提示重要的程序信息
    4.3、 QFileDialog 用于获取系统中的文件路径























































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值