第19课 - Qt 中的标准对话框(QMessageBox和QFileDialog)

1、标准对话框 

Qt为开发者提供了一些可复用的对话框类型

Qt提供的可复用对话框全部继承自QDialog

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

2、消息对话框 

消息对话框是应用程序中最常见的界面元素 

消息对话框主要用于:

         - 为用户提示重要信息 

        -强制用户进行操作选择 

消息对话框的使用方式 

QMessageBox中的实用函数 

       - QMessageBox:: question 

       - QMessageBox:: information 

       - QMessageBox: :warning 

       - QMessageBox:: critical 

       - QMessageBox:: about 

3、文件对话框

文件对话框常用于以下情形 

       - Open Mode 

              应用程序中需要用户打开一个外部的文件 

       - Save Mode 

              应用程序中需要将当前内容存储于用户指定的外部文件中 

 

文件对话框的使用方式

 

文件类型过滤器 

     -在文件对话框中可以通过文件后缀定义过滤器

     -过滤器定义规则: 

                    显示名(*. 后缀1 *. 后缀2*. 后缀N

         例如:

       

 

QFileDialog中的实用函数 

        - QFileDialog:: getOpenFileName 

        - QFileDialog:: getOpenFileNames 

        - Qfiledialog:: getSaveFileName 

4、编程实验 

消息、文件对话框使用实例     19-1.pro 

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.cpp

#include "Widget.h"
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>


Widget::Widget(QWidget *parent) : QWidget(parent),
    SimpleMsgBtn(this), CustomMsgBtn(this), OpenFileBtn(this), SaveFileBtn(this)
{
    SimpleMsgBtn.setText("Simple Message Dialog");
    SimpleMsgBtn.move(90, 50);
    SimpleMsgBtn.resize(200, 30);

    CustomMsgBtn.setText("Custom Message Dialog");
    CustomMsgBtn.move(90, 100);
    CustomMsgBtn.resize(200, 30);

    OpenFileBtn.setText("Open File Dialog");
    OpenFileBtn.move(90, 150);
    OpenFileBtn.resize(200, 30);

    SaveFileBtn.setText("Save File Dialog");
    SaveFileBtn.move(90, 200);
    SaveFileBtn.resize(200, 30);

 //   resize(200, 220);
    setFixedSize(400, 320);

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

    msg.setText("This is a message dialog!");

    msg.exec();
}

void Widget::CustomMsgBtn_Clicked()
{
    QMessageBox msg(this);

    msg.setWindowTitle("Window Title");   
    msg.setText("This is a detail message dialog!");
    msg.setIcon(QMessageBox::Information);
    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);   //这些步骤都用information直接代替

    if( msg.exec() == QMessageBox::Ok )
    {
        qDebug() << "Ok button is clicked!";
    }
}

void Widget::OpenFileBtn_Clicked()
{
    QFileDialog dlg(this);

    dlg.setAcceptMode(QFileDialog::AcceptOpen);
    dlg.setFilter("Text(*.txt)");
    dlg.setFileMode(QFileDialog::ExistingFiles);

    if( dlg.exec() == QFileDialog::Accepted )
    {
        QStringList fs = dlg.selectedFiles();

        for(int i=0; i<fs.count(); i++)
        {
            qDebug() << fs[i];
        }
    }
}

void Widget::SaveFileBtn_Clicked()
{
    QFileDialog dlg(this);

    dlg.setAcceptMode(QFileDialog::AcceptSave);
    dlg.setFilter("Text(*.txt)");


    if( dlg.exec() == QFileDialog::Accepted )
    {
        QStringList fs = dlg.selectedFiles();

        for(int i=0; i<fs.count(); i++)
        {
            qDebug() << fs[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();
}

 

5、小结 

Qt中提供了多个可复用的对话框类型

      -继承于QDialog类型 

      -遵循相同的使用方式 

QMessageBox用于提示重要的程序信息

QFileDialog用于获取系统中的文件路径 
 

猜你喜欢

转载自blog.csdn.net/qq_39654127/article/details/81392919