QT5基本对话框

简介: QFileDialog类的几个静态函数见上表,用户通过这些函数可以很方便地定制 自己的文件对话框。其中,getOpenFileName()函数返回用户选择的文件名。但是当 用户在选择文件时,如果选择“取消”(Cancel),则返回一个空串。在此仅详细说 明getOpenFileName()静态函数中各个参数的作用,其他文件对话框类中相关的静态函数 的参数有与其类似之处。

QT5基本对话框


标准基本对话框所需的静态函数

相关类 类说明 静态函数 函数说明
QFileDialog 类 标准文件对 话框 getOpenFileName 获得用户选择的文件名



getSaveFileName 获得用户保存的文件名



getExistingDirectory 获得用户选择的已存在的目录 名



getOpenFileNames 获得用户选择的文件名列表
QColorDialog 类 标准颜色对 话框 getColor 获得用户选择的颜色值
QFontDialog 类 标准字体对 话框 getFont 获得用户选择的字体
QlnplitQialog 类 标准输入对 话框 getText 标准字符串输入对话框



getltem 下拉表条目输入框



getlnt int类型数据输入对话框



getDouble double类型数据输入对话框
QMessageBox 类 消息对 话框 QMessageBox: :question Question消息框



QMessageBox: :infbrmation Information 消息框



QMessageBox::warning Warning消息框



QMessageBox::critical Critical消息框



QMessageBox: :about About消息框



QMessageBox: :aboutQt About Qt消息框

函数说明

QFileDialog类的几个静态函数见上表,用户通过这些函数可以很方便地定制 自己的文件对话框。其中,getOpenFileName()函数返回用户选择的文件名。但是当 用户在选择文件时,如果选择“取消”(Cancel),则返回一个空串。在此仅详细说 明getOpenFileName()静态函数中各个参数的作用,其他文件对话框类中相关的静态函数 的参数有与其类似之处。

QString getOpenFileName(QWidget *parent = nullptr,
                        const QString &caption = QString(),
                        const QString &dir = QString(),
                        const QString &filter = QString(),
                        QString *selectedFilter = nullptr,
                        Options options = Options());

getColor()函数是标准颜色对话框QColorDialog类的一个静态函数,该函数返 回用户选择的颜色值,下面是getColor()函数形式:

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


getFont()函数是标准字体对话框QFontDialog类的一个静态函数,该函数返回 用户所选择的字体,下面是getFont()函数形式:

QFont getFont(bool *ok, QWidget *parent = nullptr);
QFont getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(),FontDialogOptions options = FontDialogOptions());


标准输入对话框提供四种数据类型的输入,包括字符串、int数据类型、double 数据类型和下拉列表框的条目。下面的例子演示了各种标准输入框的使用方法,首 先完成界面的设计。具体操作步骤如下。


标准字符串输入对话框是通过QInputDialog类的静态函数getText()来完成的, getText()函数形式如下:

QString getText(QWidget *parent, const QString &title, const QString &label,
                QLineEdit::EchoMode echo = QLineEdit::Normal,
                const QString &text = QString(), bool *ok = nullptr,
                Qt::WindowFlags flags = Qt::WindowFlags(),
                Qt::InputMethodHints inputMethodHints = Qt::ImhNone);


标准条目选择对话框是通过QInputDialog类的静态函数getltem()来完成的, getltem ()函数形式如下:

QString getItem(QWidget *parent, const QString &title, const QString &label,
                const QStringList &items, int current = 0, bool editable = true,
                bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(),
                Qt::InputMethodHints inputMethodHints = Qt::ImhNone);


标准int类型输入对话框是通过QInputDialog类的静态函数getlnt()来完成的, getlnt()函数形式如下:

int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
            int minValue = -2147483647, int maxValue = 2147483647,
            int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());


标准double类型输入对话框是通过QInputDialog类的静态函数getDouble()来完成的,getDouble()函数形式如下:

double getDouble(QWidget *parent, const QString &title, const QString &label,
                double value = 0, double minValue = -2147483647,
                double maxValue = 2147483647, int decimals = 1, bool *ok = nullptr,
                Qt::WindowFlags flags = Qt::WindowFlags());
double getDouble(QWidget *parent, const QString &title, const QString &label,
                double value, double minValue, double maxValue, int decimals, bool *ok,
                Qt::WindowFlags flags, double step);


在实际的程序开发中,经常会用到各种各样的消息框来为用户提供一些提示或 提醒,Qt提供了 QMessageBox类用于实现此项功能。


常用的消息对话框包括Question消息框、Information消息框、Warning消息框、 Critical消息框、About (关于)消息框、About Qt消息框及Custom (自定义)消息 框。其中,Question消息框、Information消息框、Warning消息框和Critical消息框 的用法大同小异,这些消息框通常都包含为用户提供一些提醒或一些简单询问用的 一个图标、一条提示信息及若干个按钮。Question消息框为正常的操作提供一个简 单的询问;Information消息框为正常的操作提供一个提示;Warning消息框提醒用 户发生了一个错误;Critical消息框警告用户发生了一个严重错误。

Question消息框使用QMessageBox::question()函数完成,此函数形式如下:

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

Information消息框使用QMessageBox::information()函数完成,函数形式如下:

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

Warning消息框使用QMessageBox::warning()函数完成,函数形式如下:

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

Critical消息框使用QMessageBox::critical()函数完成,函数形式如下:

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


About消息框使用QMessageBox::about()函数完成,函数形式如下:

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


About Qt消息框使用QMessageBox:: aboutQt()函数完成,函数形式如下:

void aboutQt(QWidget *parent, const QString &title = QString());


示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QComboBox>
#include <QStackedWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <iostream>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow *window = new QMainWindow();
    QWidget *widget = new QWidget();
    QGridLayout *layout = new QGridLayout();
    widget->setLayout(layout);
    window->setCentralWidget(widget);
    QPushButton *btn1 = new QPushButton("文件对话框",widget);
    QPushButton *btn2 = new QPushButton("颜色对话框",widget);
    QPushButton *btn3 = new QPushButton("字体对话框",widget);
    QPushButton *btn4 = new QPushButton("输入对话框",widget);
    QPushButton *btn5 = new QPushButton("消息对话框",widget);
    QPushButton *btn6 = new QPushButton("自定义对话框",widget);
    layout->addWidget(btn1,0,0);
    layout->addWidget(btn2,0,1);
    layout->addWidget(btn3,1,0);
    layout->addWidget(btn4,1,1);
    layout->addWidget(btn5,2,0);
    layout->addWidget(btn6,2,1);
    QInputDialog *input = new QInputDialog();
    QObject::connect(btn1,&QPushButton::clicked,[&](){
        QFileDialog::getOpenFileName(0,"open","./");
    });
    QObject::connect(btn2,&QPushButton::clicked,[&](){
        QColorDialog::getColor();
    });
    QObject::connect(btn3,&QPushButton::clicked,[&](){
        bool ok;
        QFontDialog::getFont(&ok);
    });
    QObject::connect(btn4,&QPushButton::clicked,[&](){
        input->show();
    });
    QObject::connect(btn5,&QPushButton::clicked,[&](){
        QMessageBox::information(0,"tip","im a messageBox");
    });
    QObject::connect(btn6,&QPushButton::clicked,[&](){
        QMessageBox::information(0,"tip","本来应该弹出一个自定义的类");
    });
    window->show();
    return a.exec ();
}

当以上所有消息框都不能满足开发的需求时,Qt还允许自定义消息框 (Custom)o包括消息框的图标、按钮和内容等都可根据需要进行设定。


工具盒类

工具盒类称为QToolBox, QToolBox提供了一种列状的层叠窗体,而 QToolButton提供了一种快速访问命令或选择项的按钮,通常在工具条中使用。

抽屉效果是软件界面设计中的一种常用形式,可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。

进度条

通常在处理长时间任务时需要提供进度条用于显示时间,告诉用户当前任务的 进展情况。进度条对话框的使用方法有两种,即模态方式与非模态方式。模态方式 的使用比较简单方便,但必须使用QApplication::processEvents。使事件循环保持正 常进行状态,从而确保应用不会阻塞。若使用非模态方式,则需要通过QTime实 现定时设置进度条的值。

Qt提供了两种显示进度条的方式,一种是QProgressBar (如图4.9所示),提 供了一种横向或纵向显示进度的控件表示方式,用来描述任务的完成情况;另一种 是QProgressDialog (如图4.10所示),提供了一种针对慢速过程的进度对话框表示 方式,用于描述任务完成的进度情况。标准的进度条对话框包括一个进度显示条、 一个取消按钮及一个标签。

示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QProgressBar>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow *window = new QMainWindow();
    QProgressBar *bar = new QProgressBar();
    bar->setMinimum(0);
    bar->setMaximum(0);
    window->setCentralWidget(bar);
    window->show();
    return a.exec ();
}


示例图片:

796c173953a8447d84c842dbb4e582bd.png


QPalette类

该类有两个基本的概念,一个是 ColorGroup,另一个是ColorRole。其中,ColorGroup指的是以下三种不同的状态。

• QPalette::Active:获得焦点的状态。

• QPalette::Inactive:未获得焦点的状态。

• QPalette::Disable:不可用状态。

其中,Active状态与Inactive状态在通常情况下颜色显示是一致的,也可以根 据需要设置为不一样的颜色。

ColorRole指的是颜色主题,即对窗体中不同部位颜色的分类。例如, QPalette::Window是指背景色,QPalette::WindowText指的是前景色,等等。

QPalette类使用最多、最重要的函数是setColor(涵数,其原型如下:

void QPalette : : setColor (ColorGroup group, ColorRole role, const QColor & color);

对主题颜色进行设置的同时,还区分了状态,即对某个主题在某个状态下的颜 色进行了设置。

void QPalette::setcolor(ColorRole role,const QColor & color);

只对某个主题的颜色进行设置,并不区分状态。

QPalette类同时还提供了 setBrush()函数,通过画刷的设置对显示进行更改,这 样就有可能使用图片而不仅是单一的颜色来对主题进行填充了。Qt之前的版本中有 关背景色设置的函数如setBackgroundColor()或前景色设置的函数如 setForegroundCoIor()在Qt 5中都被废止,统一由QPalette类进行管理。例如, setBackgroundColor()函数可由以下语句

代替:

xxx->setAutoFillBackground(true);
QPalette p = xxx->palette ();
p.setColor(QPalette::Window,color);
//p.setBrush(QPalette::Window,brush); 
xxx->setPalette (p);

QTime类

QTime的currentTime()函数用于获取当前的系统时间;QTime的toString()函数 用于将获取的当前时间转换为字符串类型。为便于显示,toString()函数的参数需指 定转换后时间的显示格式。

• H/h:小时(若使用H表示小时,则无论何时都以24小时制显示小时;若使 用h表示小时,则当同时指定AM/PM时,釆用12小时制显示小时,其他情况下 仍采用24小时制进行显示)。

• m:分钟。

• s:秒钟。

• AP/A:显示 AM 或 PM.

• Ap/a:显示 am 或 pm。

可根据实际显示需要进行格式设置,如:

hh:mm:ss A 22:30:08 PM

H:mm:s a 10:30:8 pm

QTime的toString()函数也可直接利用Qt::DateFormat作为参数指定时间显示的 格式,如 Qt::TextDate、Qt::ISODate、Qt::LocaleDate 等。

QSplashScreen 类

多数大型应用程序启动时都会在程序完全启动前显示一个启动画面,在程序完 全启动后消失。程序启动画面可以显示相关产品的一些信息,使用户在等待程序启 动的同时了解相关产品的功能,这也是一个宣传的方式。Qt中提供的QSplashScreen 类实现了在程序启动过程中显示启动画面的功能。

示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QProgressBar>
#include <QSplashScreen>
#include <QPixmap>
#include <QThread>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPixmap pixmap("Qt.png");
    QSplashScreen splash(pixmap);
    splash.show();
    a.processEvents();
    QMainWindow *window = new QMainWindow();
    QProgressBar *bar = new QProgressBar();
    bar->setMinimum(0);
    bar->setMaximum(0);
    window->setCentralWidget(bar);
    window->show();
    splash.finish(window);
    return a.exec ();
}

目录
相关文章
|
5月前
Qt之对话框
Qt之对话框
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
534 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
635 4
|
3月前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
337 4
|
3月前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
68 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
220 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
69 3
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
485 3
|
3月前
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
117 3