一、标准对话框

Qt为开发者提供了一些可复用的对话框类型
Qt提供的可复用对话框全部继承自QDialog类
image.png

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

image.png

二、消息对话框

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

消息对话框主要用于
为用户提示重要消息
强制用户进行操作选择
image.png
消息对话框的使用方式
image.png

QMessageBox中的实用函数(课后练习)
QMessageBox::question
QMessageBox::information
QMessageBox::warning
QMessageBox::critical
QMessageBox::about

三、文本对话框

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

Open Mode
应用程序中需要用户打开一个外部文件
Save Mode
应用程序中需要将当前内容存储于用户指定的外部文件中

文本对话框的使用方式

image.png

四、文件对话框

文本类型过滤器
在文件对话框中可以通过文件后缀定义过滤器
过滤器定义规则:
image.png
四、文件对话框使用实例19-1.pro

#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(20, 20);
    SimpleMsgBtn.resize(160, 30);

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

    OpenFileBtn.setText("Open File Dialog");
    OpenFileBtn.move(20, 120);
    OpenFileBtn.resize(160, 30);

    SaveFileBtn.setText("Save File Dialog");
    SaveFileBtn.move(20, 170);
    SaveFileBtn.resize(160, 30);

    resize(200, 220);
    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);

    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::Warning);//设置图标
    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll| QMessageBox::NoToAll);//设置按钮,两个按钮  ok cancel

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

void Widget::OpenFileBtn_Clicked()
{
    QFileDialog dlg(this);//文本对话框

    dlg.setAcceptMode(QFileDialog::AcceptSave);//打开模式
    dlg.setFilter("Text(*.txt)");
    //dlg.setFileMode(QFileDialog::ExistingFile);//打开文件一次只打开一个文件

    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()
{
    
}

image.png

五、小结

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


YingLi
6 声望4 粉丝

From zero to hero.