Qt 中的标准对话框[Qt教程]

目录

1、标准对话框 

2、QMessageBox和QFileDialog

1、消息对话框 

2、文件对话框

3、编程实验 

3、QColorDialog和QInputDialog

1、颜色对话框 

2、输入对话框 

3、编程实验

4、QFontDialog、QProgressDialog和QPrintDialog

1、字体对话框 

2、进度对话框 

3、打印对话框 

4、编程实验

5、小结 


1、标准对话框 

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

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

Qt 中的标准对话框[Qt教程]_第1张图片

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

Qt 中的标准对话框[Qt教程]_第2张图片

2、QMessageBox和QFileDialog

1、消息对话框 

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

消息对话框主要用于:

        -为用户提示重要信息 

        -强制用户进行操作选择 

Qt 中的标准对话框[Qt教程]_第3张图片

消息对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第4张图片

 

QMessageBox中的实用函数 (具体用法请自查qt帮助文档)

void about ( QWidget * parent, const QString & title, const QString & text );

StandardButton critical ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

StandardButton information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

StandardButton question ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

StandardButton warning ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

 

2、文件对话框

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

       - Open Mode (打开模式)

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

       - Save Mode (保存模式)

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

文件对话框的使用方式

Qt 中的标准对话框[Qt教程]_第5张图片

文件类型过滤器 

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

     -过滤器定义规则: 显示名(*. 后缀1 *. 后缀2…*. 后缀N) 

         例如:

       Qt 中的标准对话框[Qt教程]_第6张图片

QFileDialog中的实用函数 

QString QFileDialog::getExistingDirectory();
QString QFileDialog::getOpenFileName();
QStringList QFileDialog::getOpenFileNames();
QString QFileDialog::getSaveFileName();

 

3、编程实验 

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

Widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include 
#include 

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


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);   // 前面这些步骤都可用QMessageBox::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

main.cpp

#include 
#include "Widget.h"

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

    w.show();
    
    return a.exec();
}

Qt 中的标准对话框[Qt教程]_第7张图片


 

3、QColorDialog和QInputDialog

1、颜色对话框 

Qt中提供了预定义的颜色对话框QColorDialog类 

QColorDialog类用于提供指定颜色的对话框部件 

Qt 中的标准对话框[Qt教程]_第8张图片

 

颜色对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第9张图片

Qt中的QColor类用来在程序中表示颜色的概念 

QColor类同时支持多种颜色表示方式

        - RGB: 以红,绿,蓝为基准的三色模型 

        - HSV: 以色调,饱和度,明度为基准的六角锥体模型 

        - CMYK: 以天蓝,品红,黄色,黑为基准的全彩印刷色彩模型 

QColorDialog中的实用函数 

QColor	getColor ( const QColor & initial, QWidget * parent, const QString & title, ColorDialogOptions options = 0 );
QColor	getColor ( const QColor & initial = Qt::white, QWidget * parent = 0 );

 

2、输入对话框 

Qt中提供了预定义的输入对话框QlnputDialog类 

QlnputDialog类用于需要临时进行数据输入的场合 

 

输入对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第10张图片

 

输入对话框的输入模式 

         QinputDialog::TextInput -输入文本字符串

         QinputDialog::IntInput -输入整形数 

         QinputDialog::DoubleInput    - 输入浮点数 

QlnputDialog中的实用函数 

double QinputDialog::getDouble();
int QinputDialog::getInt();
QString QinputDialog::getItem();
QString QinputDialog::getText();

3、编程实验

颜色、输入对话框使用实例    20-1.pro 

Widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT
private:
    QPushButton ColorDialogBtn;
    QPushButton InputDialogBtn;
private slots:
    void ColorDialogBtn_Clicked();
    void InputDialogBtn_Clicked();
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

#endif

Widget.cpp

#include "Widget.h"
#include 
#include 
#include 

Widget::Widget(QWidget *parent) : QWidget(parent),
    ColorDialogBtn(this), InputDialogBtn(this)
{
    ColorDialogBtn.setText("Color Dialog");
    ColorDialogBtn.move(20, 20);
    ColorDialogBtn.resize(160, 30);

    InputDialogBtn.setText("Input Dialog");
    InputDialogBtn.move(20, 70);
    InputDialogBtn.resize(160, 30);

    resize(200, 120);
    setFixedSize(200, 120);

    connect(&ColorDialogBtn, SIGNAL(clicked()), this, SLOT(ColorDialogBtn_Clicked()));
    connect(&InputDialogBtn, SIGNAL(clicked()), this, SLOT(InputDialogBtn_Clicked()));
}

void Widget::ColorDialogBtn_Clicked()
{
    QColorDialog dlg(this);

    dlg.setWindowTitle("Color Editor");
    dlg.setCurrentColor(QColor(100, 111, 222)); //自定义  可以直接dlg.setCurrentColor(QColor::blue);

    if( dlg.exec() == QColorDialog::Accepted )
    {
        QColor color = dlg.selectedColor();

        qDebug() << color;
        qDebug() << color.red();
        qDebug() << color.green();
        qDebug() << color.blue();
        qDebug() << color.hue();
        qDebug() << color.saturation();
        qDebug() << color.value();
    }
}

void Widget::InputDialogBtn_Clicked()
{
    QInputDialog dlg(this);

    dlg.setWindowTitle("Input Test");
    dlg.setLabelText("Please input an integer:");
    dlg.setInputMode(QInputDialog::TextInput);


    if( dlg.exec() == QInputDialog::Accepted )
    {
        qDebug() << dlg.textValue();
    }
}

Widget::~Widget()
{
    
}

main.cpp

#include 
#include "Widget.h"

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

    w.show();
    
    return a.exec();
}

Qt 中的标准对话框[Qt教程]_第11张图片

Qt 中的标准对话框[Qt教程]_第12张图片

Qt 中的标准对话框[Qt教程]_第13张图片

 

4、QFontDialog、QProgressDialog和QPrintDialog

1、字体对话框 

Qt中提供了预定义的字体对话框QFontDialog类 

QFontDialog类用于提供选择字体的对话框部件 

Qt 中的标准对话框[Qt教程]_第14张图片

 

字体对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第15张图片

 

QFontDialog中的实用函数 

           - QFontDialog: : getFont 

2、进度对话框 

Qt中提供了预定义的进度对话框QProgressDialog类 

QProgressDialog类用于显示进度信息 

QProgressDialog类用于需要用户等待的场合

Qt 中的标准对话框[Qt教程]_第16张图片

 

进度对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第17张图片

 

3、打印对话框 

Qt中提供了预定义的打印对话框QPrintDialog类 

QPrintDialog类用于设置打印相关的参数信息 

Qt 中的标准对话框[Qt教程]_第18张图片

 

打印对话框的使用方式 

Qt 中的标准对话框[Qt教程]_第19张图片

 

Qt中的QPrinter类是打印设备及其参数的封装 

QPrinter类封装了系统中打印设备的驱动接口 

QPrinter以相同方式使用系统中的不同打印设备

 

4、编程实验

字体、进度、打印对话框使用实例    21-1.pro 

Widget.h

#ifndef _WIDGET_H_
#define _WIDGET_H_

#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT
private:
    QPushButton FontDialogBtn;
    QPushButton ProgressDialogBtn;
    QPushButton PrintDialogBtn;
private slots:
    void FontDialogBtn_Clicked();
    void PrintDialogBtn_Clicked();
    void ProgressDialogBtn_Clicked();
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

#endif

Widget.cpp

#include "Widget.h"
#include 
#include 
#include 
#include 
#include 
#include 

Widget::Widget(QWidget *parent) : QWidget(parent),
    FontDialogBtn(this), ProgressDialogBtn(this), PrintDialogBtn(this)
{
    FontDialogBtn.setText("Font Dialog");
    FontDialogBtn.move(20, 20);
    FontDialogBtn.resize(160, 30);

    ProgressDialogBtn.setText("Progress Dialog");
    ProgressDialogBtn.move(20, 70);
    ProgressDialogBtn.resize(160, 30);

    PrintDialogBtn.setText("Print Dialog");
    PrintDialogBtn.move(20, 120);
    PrintDialogBtn.resize(160, 30);

    resize(200, 170);
    setFixedSize(200, 170);

    connect(&FontDialogBtn, SIGNAL(clicked()), this, SLOT(FontDialogBtn_Clicked()));
    connect(&ProgressDialogBtn, SIGNAL(clicked()), this, SLOT(ProgressDialogBtn_Clicked()));
    connect(&PrintDialogBtn, SIGNAL(clicked()), this, SLOT(PrintDialogBtn_Clicked()));
}

void Widget::FontDialogBtn_Clicked()
{
    QFontDialog dlg(this);

    dlg.setWindowTitle("Font Dialog Test");
    dlg.setCurrentFont(QFont("Courier New", 10, QFont::Bold));

    if( dlg.exec() == QFontDialog::Accepted )
    {
        qDebug() << dlg.selectedFont();
    }
}

void Widget::ProgressDialogBtn_Clicked()
{
    QProgressDialog dlg(this);

    dlg.setWindowTitle("Updating...");
    dlg.setLabelText("Downloading update from server...");
    dlg.setMinimum(0);
    dlg.setMaximum(100);
    dlg.setValue(35);

    // create a new thread  

    dlg.exec();
}

void Widget::PrintDialogBtn_Clicked()
{
    QPrintDialog dlg(this);

    dlg.setWindowTitle("Print Dialog Test");

    if( dlg.exec() == QPrintDialog::Accepted )
    {
        QPrinter* p = dlg.printer();    // 得到QPrinter对象

        QTextDocument td;

        //td.setPlainText("Printer object test!"); 
        td.setHtml("

Print html object test"); p->setOutputFileName("D:\\test.xps"); // 使用虚拟打印设备 td.print(p); // 打印到QPrint对象(封装了打印设备和参数) } } Widget::~Widget() { }

main.cpp

#include 
#include "Widget.h"

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

Qt 中的标准对话框[Qt教程]_第20张图片

Qt 中的标准对话框[Qt教程]_第21张图片

Qt 中的标准对话框[Qt教程]_第22张图片

 

 

5、小结 

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

      -继承于QDialog类型 

      -遵循相同的使用方式 

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

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

QColorDialog类用于提供指定颜色的对话框部件 

QColor类用来在程序中表示颜色的概念 

QlnputDialog类用于需要临时进行数据输入的场合 

Qt中标准对话框的设计模式

          - GUI界面部件产生数据对象 

        -业务逻辑中的其它对象使用数据对象 

          - GUI界面业务逻辑通过数据对象连接 

Qt 中的标准对话框[Qt教程]_第23张图片

 

你可能感兴趣的:(QT【笔记】)