Qt 19 标准对话框 -消息对话框QMessageBox ,文件选择对话框QFileDialog
发布日期:2021-05-07 13:26:08 浏览次数:16 分类:原创文章

本文共 5298 字,大约阅读时间需要 17 分钟。

QT 为开发者提供了一些可复用的对话框类型,这些可复用对话框全部继承自 QDialog类

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

/*定义对话框对象DialogType 对话框类型this ,指定当前对话框的父窗口*/DialogType dlg(this);/* 设置对话框属性*/dlg.setPropertyXXX(value)//以模态对框框的方式来使用if(dlg.exec() == DialogType::Value){//获取对话框数据Type v = dlg.getDialogValue();//处理对话框//...}

消息对话框 QMessageBox 用于提示重要的程序信息

1 为用户提示重要消息2 强制用户进行操作选择

消息对话框使用:

//构造消息对话框对象,指定父窗口QMessageBox msg(this)//设置消息对话框的相关属性msg.setWindowTitle("Message Title");//设置标题msg.setText("This is message content"); // 设置提示消息msg.setIcon(QMessageBox::Information); //设置图标 msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);//设置 按钮OK 按钮Cancel// 以模态方式使用if(msg.exec() == QMessageBox::Ok){qDebug() << "Ok button is clicked!"}

QMessageBox中的实用函数

QMessageBox::questionQMessageBox::informationQMessageBox::warningQMessageBox::critical

QMessageBox::information
QMessageBox::information()可以替代这几行代码:

QMessageBox msg(this);msg.setWindowTitle("Window Title");//标题msg.setText("This is a detail message dialog!");//显示消息内容//设置图标,使用标准图标 通过 QMessageBox可以得到标准图标,使用Information这个图标msg.setIcon(QMessageBox::Information);//设置标准按钮 并显示三个按钮 OK,Cancel,YesToAllmsg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);

文件选择对话框 QFileDialog 用于获取系统中文件路径
Open Mode :应用程序需要用户打开一个外部的文件
Save Mode :应用程序中需要将当前内容存储于用户指定的外部文件中

使用:

//定义文件对话框,并指定父窗口QFileDialog fd(this);//设置属性,即 打开模式:AcceptOpen,保存模式:AcceptSavefd.setAcceptMode(QFileDialog :: AcceptOpen);//在打开模式下又分为两种模式: 选择单个文件(ExistingFile), 选择多个文件(ExistingFiles),fd.setFileMode(QFileDialog ::ExistingFile);// 以模态方式使用if(fd.exec() == QFileDialog ::Accepted){// 得到用户所选择的文件,使用 selectedFiles//返回值为QStringList链表 链表中信息 即所选择的文件: 文件路径+名文件路径+名QString fs = fd.selectedFiles();}

QFileDialog 中的实用函数

QFileDialog::getOpenFileNameQFileDialog::getOpenFileNamesQFileDialog::getSaveFileName

文件类型过滤器 setFilter

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

显示名(*.后缀1 *.后缀2 *.后缀3 ... *.后缀N)如:“Image(*.png *.xpm *.jpg)”"Text(*.txt)""All(*.*)"

实验

Widget.h

#ifndef _WIDGET_H_#define _WIDGET_H_#include <QtGui/QWidget>#include <QPushButton>class Widget : public QWidget{    Q_OBJECTprivate:    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(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(){    //创建消息对话框并指定父窗口是当前 Widget    QMessageBox msg(this);    msg.setText("This is a message dialog!");    msg.exec();}//创建消息对话框 并设置图标和标准按钮void Widget::CustomMsgBtn_Clicked(){    //创建消息对话框并指定父窗口是当前 Widget    QMessageBox msg(this);    msg.setWindowTitle("Window Title");//标题    msg.setText("This is a detail message dialog!");//显示消息内容    //设置图标,使用标准图标 通过 QMessageBox可以得到标准图标,使用Information这个图标    msg.setIcon(QMessageBox::Information);    //设置标准按钮 并显示三个按钮 OK,Cancel,YesToAll    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);    //以模态方式使用    if( msg.exec() == QMessageBox::Ok )    {        qDebug() << "Ok button is clicked!";    }}//打开模式的文件选择对话框void Widget::OpenFileBtn_Clicked(){    //定义文件对话框,并指定父窗口    QFileDialog dlg(this);    //设置属性,即 打开模式:AcceptOpen,保存模式:AcceptSave    dlg.setAcceptMode(QFileDialog::AcceptOpen);    //文件过滤    dlg.setFilter("Text(*.txt)");    //模式为 选择多个文件(ExistingFiles),    dlg.setFileMode(QFileDialog::ExistingFiles);     //如果用户点击OK    if( dlg.exec() == QFileDialog::Accepted )    {        // 得到用户所选择的文件,使用 selectedFiles 返回值为QStringList链表        QStringList fs = dlg.selectedFiles();        //打印链表中信息 即所选择的文件: 文件路径+名        for(int i=0; i<fs.count(); i++)        {            qDebug() << fs[i];        }    }}//保存模式的文件选择对话框void Widget::SaveFileBtn_Clicked(){    QFileDialog dlg(this);    //设置属性,即 打开模式:AcceptOpen,保存模式:AcceptSave    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();}
上一篇:Qt 20 标准对话框 - 颜色对话框QColorDialog,输入对话框QInputDialog
下一篇:Linux系统编程67 网络编程1 - 报式套接字传输

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月10日 05时36分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章