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 (); }
示例图片:
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 (); }