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

1. 标准对话框

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

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

(3)Qt中的标准对话框遵循相同的使用方式(三板斧)

//1、定义对话框对象(第1板斧)
DialogType dlg(this);

//2、设置对话框属性(第2板斧)
dlg.setPropertyXXX(value);

if(dlg.exec() == DialogType::value) //3.打开对话框(第3板斧)
{
    //4、获取对话框数据
    Type v = dlg.getDialogValue();

    //处理对话框数据
}

2. 消息对话框:QMessageBox

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

(2)消息对话框主要用于:为用户提示重要信息或强制用户进行操作选择

(3)消息对话框的使用方式(见下面实例分析)

(4)消息对话框中的实用静态函数

  ①QMessageBox::question(…) //创建带有“是/否”按钮的消息框

  ②QMessageBox::information(…) //创建带有“确定”或“取消”按钮的消息框

  ③QMessageBox::warning(…)     //创建一个警告对话框

  ④QMessageBox::critical(…)    //创建一个严重错误对话框

  ⑤QMessageBox::about(…)       //创建“关于”对话框

3. 文件对话框:QFileDialog

(1)文件对话框常用于以下情况

  ①Open Mode:打开一个外部文件

  ②Save Mode:将当前内容存储于指定的外部文件中

(2)文件对话框的使用方式(见下面的实例分析)

(3)文件类型过滤器:setNameFilter(QString&);

  格式:显示名(*.后缀1 *.后缀2… *.后缀N),如

  "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)"

(4)QFileDialog中实用函数

  ①QFileDialog::getOpenFileName;

  ②QFileDialog::getOpenFileNames;

  ③QFileDialog::getSaveFileName

【编程实验】消息对话框和文件对话框使用实例

//main.cpp

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

//Widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include <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>

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

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

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

    SaveFileBtn.setText("SaveFile Dialog");
    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);
    msg.setText("This is a MessageBox!");
    msg.exec();
}

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

    msg.setWindowTitle("Custom Messagebox");
    msg.setText("This is a detail MessageBox");
    msg.setIcon(QMessageBox::Information);
    msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel |
                           QMessageBox::YesToAll);

    //information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
    //int ret = QMessageBox::information(this, "Custom MessageBox",
    //                                   "This is a detail MessageBox"),
    //                                    QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll);

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

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

    dlg.setAcceptMode(QFileDialog::AcceptOpen);
    //Qt5.5以下用dlg.setFilter
    dlg.setNameFilter("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)");
    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.setNameFilter("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)");

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

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

Widget::~Widget()
{

}

4. 小结

(1)Qt中提供了多个可复用的对话框类型,它们都继承于QDialog,同时遵循相同的使用方式

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

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

时间: 2024-12-25 07:10:39

第19课 Qt中的标准对话框(上)的相关文章

第21课 Qt中的标准对话框(下)

1. 字体对话框:QFontDialog (1)Qt中提供了预定义的字体对话框类(QFontDialog) (2)QColorDialog类用于提供选择字体的对话框部件 (3)字体对话框的使用方式(见后面的实例分析) (4)QFontDialog中的实用函数: QFontDialog::getFont 2. 进度对话框:QProgressDialog (1)Qt中提供了预定义的进度对话框类(QProgressDialog) (2)QProgressDialog类用于显示进度信息 (3)QProg

第20课 Qt中的标准对话框(中)

1. 颜色对话框:QColorDialog (1)QColorDialog类 ①Qt中提供了预定义的颜色对话框类(QColorDialog) ②QColorDialog类用于提供指定颜色的对话框部件 ③颜色对话框的使用方式(见后面的实例) ④QColorDialog中的实用函数:QColorDialog::getColor (2)QColor类:用来表示颜色的概念,同时支持多种的颜色表示方式 ①RGB:以红.绿.蓝为基准的三色模型 ②HSV:以色调.饱和度.明度为基准的六角锥体模型 ③CMYK:

Qt中的标准对话框

1.标准对话框 (1)Qt为开发者提供了一些可复用的对话框类型 (2)Qt提供的可复用对话框全部继承自QDialog类 @1:QMessageBox(用来提示消息的对话框) QFileDialog(文件对话框) QPrintDialog QColorDialog(用来选择一种颜色) QInputDialog QProgressDialog 这些对话框类型全部继承自QDialog类 (3)Qt中标准对话框遵循相同的使用方式 DialogType dlg(this); //先定义对话框对象,Dial

第38课 Qt中的事件处理(上)

1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个QEvent的对象 ②Qt事件用于描述程序内部或外部发生的动作 ③任意的QObject对象都具备事件处理的能力 (2)GUI应用程序的事件处理方式 ①Qt事件产生后立即被分发到QWidget对象 ②QWidget中的event(QEvent*)进行事件处理 ③event()根据事件类型的不同,调用不

第三十八课、Qt中的事件处理(上)

一.图形界面应用程序的消息处理模型 二.Qt的事件处理 1.Qt平台将系统产生的消息转换为Qt事件(每一个系统消息对象Qt平台的一个事件) (1).Qt事件是一个QEvent的对象 (2).Qt事件用于描述程序内部或者外部发生的动作 (3).任意的QObject对象都具备事件处理的能力 2.GUI应用程序的事件处理方式 (1).Qt事件产生后立即被分发到QWidget对象 (2).QWidget中的event(QEvent*)进行事件处理 (3).event()根据事件类型调用不同的事件处理函数

第47课 Qt中的调色板

1. QPalette类 (1)QPalette类提供了绘制QWidget组件的不同状态所使用的颜色. (2)QPalette对象包含了3个状态的颜色描述 ①激活颜色组(Active):组件获得焦点使用的颜色搭配方案 ②非激活颜色组(Inactive):组件失去焦点使用的颜色方案 ③失效颜色组(Disabled):组件处于不可用状态使用的颜色方案 2.QPalette类中颜色组用途 (1)QPalette类中的颜色组定义了组细节的颜色值 (2)QPalette::ColorRole中的常量值用于

第39课 Qt中的事件处理(下)

1. 事件的传递过程 (1)操作系统检测到用户动作时,会产生一条系统消息,该消息被发送到Qt应用程序 (2)Qt应用程序收到系统消息后,将其转化为一个对应的事件对象,并将其分发出去. (3)事件对应被分发到当前正在操作的窗口部件上,该窗口部件会调用event函数来处理,然后,在这个函数内部又会调用其他的子函数(如KeyPress或mouseReleaseEvent)来进行具体的处理. (4)event函数处理完后,可能会将当前事件传递给父组件(parent)对象.但这个过程只是一种可能,也就是有

QT中的各种对话框

大家可以参见QT中各种MessageBox的使用的这篇文章 界面效果图如下,大家可以用代码自己操作 diglog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE class QCheckBox; class QLabel; class QErrorMessage; QT_END_NAMESPACE class Dialog : public QDialog { Q_OBJECT public:

第7课 Qt中的坐标系统

1. 坐标系统 (1)GUI操作系统都有特定的坐标系统 (2)图形界面程序在坐标系统中进行窗口和部件的定位 (3)定位类型 ①顶级窗口部件的定位 ②窗口内部件的定位 ③窗口部件的大小设置 (4)QWidget类提供的定位函数 ①Qt使用统一的坐标系统定位窗口部件的位置和大小 ②Qt部件类提供成员函数在坐标系统中进行定位 2. QWidget类提供了窗口部件所需的坐标系统成员函数 (1):x().y();在父窗口中的起始坐标 (2):width().height();客户区的宽度和高度 (3)ge