在本章内,如果在当前的类里面没有找到需要的函数,就往类的父类去找。
一、对话框
什么交对话框,对话框一般是指在窗口下发生人机交互的弹出框。 比如信息提示框,信息确认框。对话框是一种次要窗口,包含按钮和各种选项,通过它们可以完成特定命令或任务。在图形用户界面中,对话框是一种特殊的视窗, 用来在用户界面中向用户显示信息,或者在需要的时候获得用户的响应。之所以称之为“对话框”是因为它是用户与用户通过计算机来对话的窗口。
在QT中常见的对话框有文件对话框、消息对话框、颜色对话框、字体对话框、输入对话框
1、文件对话框 (QFileDialog)
顾名思义就是对文件进行操作的对话框就是文件对话框,就行对文件进行创建、删除、保存等操作的一些操作。其文件对话框所包含的类在QFileDialog类中,对文件对话框的所有操作函数都是从里面进行调用的。如打开单个文件、打开多个文件、保存操作。
其运用的函数在QT->帮助->QFileDialog里面,在里面可以看见所有的运用函数,以及函数的具体实现。
一般常用的是这些函数,如果需要了解其他函数,就去查看QFileDialog类
//1、打开单个文件
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = ...)
//2、打开多个文件
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = ...)、
//3、保存文件
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = ...)
2、消息对话框(QMessageBox)
QMessageBox类提供了一个模式化的对话框,用于通知用户或向用户提出问题并得到回答。
一个消息框显示一个主要的文本来提醒用户一个情况,一个信息性的文本来进一步解释这个提醒或问用户一个问题,以及一个可选的详细文本来提供更多的数据,如果用户要求的话。消息框还可以显示一个图标和标准按钮,以接受用户的回应。
提供了两个使用QMessageBox的API,基于属性的API和静态函数。调用一个静态函数是比较简单的方法,但它不如使用基于属性的API灵活,而且结果的信息量也比较小。建议使用基于属性的API。
常用函数为
about
void about(QWidget *parent, const QString &title, const QString &text)
critical-----x
QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton = NoButton)
information---i
QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton = NoButton)
question---?
QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = ..., QMessageBox::StandardButton defaultButton = NoButton)
warning---!
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton = NoButton)
3、颜色对话框(QColorDialog)
QColorDialog类提供了一个用于指定颜色的对话框小部件。颜色对话框的功能是让用户选择颜色。例如,你可以在一个绘图程序中使用它,让用户设置画笔的颜色。静态函数提供了模式化的颜色对话框。
静态的getColor()函数显示对话框,并允许用户指定一种颜色。这个函数也可以用来让用户选择具有一定透明度的颜色:将ShowAlphaChannel选项作为附加参数传给用户。用户可以存储customCount()不同的自定义颜色。这些自定义颜色被所有颜色对话框共享,并在程序执行过程中被记住。使用setCustomColor()来设置自定义颜色,并使用customColor()来获取它们。当按下 "挑选屏幕颜色 "按钮时,光标会变成一个十字形,屏幕上的颜色被扫描出来。用户可以通过点击鼠标或回车键选取一种。按Escape键可以恢复进入此模式前最后选择的颜色。
函数:
QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ...)
4、字体对话框(QFontDialog)
QFontDialog类提供了一个用于选择字体的对话框小部件。一个字体对话框是通过一个静态的getFont()函数创建的。
参见QFont, QFontInfo, QFontMetrics, QColorDialog, QFileDialog, 和Standard Dialogs 示例。
QFont getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = ...)
QFont getFont(bool *ok, QWidget *parent = nullptr)
5、输入对话框(QInputDialog)
QInputDialog类提供了一个简单的便利对话框,从用户那里获得一个单一的值。输入值可以是一个字符串、一个数字或一个列表中的项目。必须设置一个标签来告诉用户他们应该输入什么。
提供了五个静态便利函数:getText(), getMultiLineText(), getInt(), getDouble(), and getItem()。所有的函数都可以以类似的方式使用。
double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = ...)
int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = ...)
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = ..., Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
二、主界面(QMainWindow)
主窗口为构建一个应用程序的用户界面提供了一个框架。Qt有QMainWindow和它的相关类来管理主窗口。QMainWindow有自己的布局,你可以在上面添加QToolBars、QDockWidgets、QMenuBar和QStatusBar。该布局有一个中心区域,可以被任何种类的部件占据。
菜单栏:QMenuBar类管理菜单栏
菜单项:QMenu类管理菜单项
执行: QAction类管理执行的动作
工具栏:QToolBar类管理工具栏
状态栏:QStatusBar类管理状态栏
工作区:QWidget类管理
就像是记事本的封面,可以看到这些信息
1、工作区(QWidget)
一般一个界面都有一个工作区,称工作区为中心工作区。也就是最底层的界面
中心工作区:
void QMainWindow::setCentralWidget(QWidget *widget)
多个工作区:
(1)void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget) 向界面增加多个工作区
参数1--Qt::DockWidgetArea area:设置工作区放置的位置
参数2--QDockWidget *dockwidget:设置工作区
(2)void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation) 向界面增加多个工作区
参数1--Qt::DockWidgetArea area:设置工作区放置的位置
参数2--QDockWidget *dockwidget:设置工作区
参数3--Qt::Orientation orientation:设置工作区摆放的位置(水平和垂直)
2、菜单栏(QMenuBar)
QMenuBar:是所有窗口的菜单栏,在此基础上添加不同的QMenu(菜单项)和QAction(行为)
(1)增加菜单
QAction *addMenu(QMenu *menu);
QMenu *addMenu(const QString &title);
QMenu *addMenu(const QIcon &icon, const QString &title)
(2)增加执行的动作
QAction *addAction(const QString &text)
QAction *addAction(const QString &text, const QObject *receiver, const char *member)
QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
QAction *addAction(const QString &text, Functor functor)
QMenu:菜单栏里面菜单(菜单项),可以显示文本和图标,但是并不负责执行操作,有点类似label的作用。
QAction:Qt将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示,QAction才是真正负责执行操作的部件。
3、工具栏(QToolBar)
工具栏包含了基本的控件(按钮、标签、编辑框等等),主窗口QMainWIndow可以设置多个工具栏,工具栏可以放置基本控件和执行的动作(QAction),但是没有菜单项。
4、状态栏(QStatusBar)
状态栏主要作用显示或者是提示的作用,状态栏也是放置一些基本的控件(按钮、标签、编辑框等等)。
三、事件
事件:事件的起因,经过,结果,QT里提供了事件,QT里对事件封装成了一个个对象(类),例如:鼠标事件(QMouseEvent)、键盘事件(QKeyEvent)、定时器事件(QTimer)、图形事件等,事件的流程:事件的产生、事件的派送、事件的分发、事件的处理,QT里所有的事件都是统一归QEvent类管理。
1、事件的产生
内部可以产生事件(定时器事件)、外部可以产生事件(鼠标:左击、右击、双击、滑轮滚动等等,键盘:按键按下、按键释放等等)
2、事件的派送
对GUI程序来说,事件的派送是通过QApplication类来对事件进行派送,调用QApplication里的exec()函数来进入事件循环状态(监听事件)
3、事件的分发
QT提供了一个类:QEvent类来负责事件的分发,QEvent类里有event()函数
4、事件的处理
QT里也提供了相应的事件处理函数来处理事件,keypressevent()、mousepressevent()等等。
5、QT里的常用的事件---QWidget类(如遇见不会就是直接查该函数)
(1)virtual void closeEvent(QCloseEvent *event) 窗口关闭事件处理函数
(2)virtual void dragEnterEvent(QDragEnterEvent *event)拖动一个窗口进入到另外一个窗口的时候,触发该事件
(3)virtual void dragLeaveEvent(QDragLeaveEvent *event)拖动一个窗口离开另外一个窗口的时候,触发该事件
(4)virtual void dragMoveEvent(QDragMoveEvent *event)拖动窗口的时候,触发该事件
(5)virtual void enterEvent(QEvent *event) 当鼠标进入到该窗口的时候,触发该事件
(6)virtual void hideEvent(QHideEvent *event) 当窗口隐藏的时候,触发该事件
(7)virtual void keyPressEvent(QKeyEvent *event) 当键盘按下的时候,触发该事件
(8)virtual void keyReleaseEvent(QKeyEvent *event)当键盘按下并释放的时候,触发该事件
(9)virtual void leaveEvent(QEvent *event) 当鼠标离开窗口的时候,触发该事件
(10)virtual void mouseDoubleClickEvent(QMouseEvent *event)当鼠标双击时,触发该事件
(11)virtual void mouseMoveEvent(QMouseEvent *event) 当鼠标移动的时候,触发该事件
(12)virtual void mousePressEvent(QMouseEvent *event) 当鼠标按下的时候,触发该事件
(13)virtual void paintEvent(QPaintEvent *event) 绘制图形时,触发该事件
(14)virtual void resizeEvent(QResizeEvent *event) 当窗口大小改变时,触发该事件
(15)virtual void timerEvent(QTimerEvent *e) override 当开启了定时器时,触发该事件
四、布局管理器
提供布局管理器来管理界面上基本的控件(按钮、标签等等)
1、水平布局管理器 类:QHBoxLayout----水平布局管理器
2、垂直布局管理器 类:QVBoxLayout----垂直布局管理器
3、网格布局管理器 类:QGridLayout-----网格布局管理器
五、文件操作
1、QFile类
直接用于对文件的操作,给QFile类传递一个文件名或者是路径
(1)打开文件:open()函数
(2)读写文件:read()函数
(3)文件写入:write()函数
(4)关闭文件:close()函数
2、QTextStream类(文本流)
(1)文本流:用于读写文本内容:QString、QIODEVICE等等-------QTextStream类
The QTextStream class provides a convenient interface for reading and writing text.
读写方法:跟文件直接读写一样
3、QDataStream类(数据流:用于读写二进制数据)
数据流多用于重载进行操作
QDataStream()
QDataStream(QIODevice *d)
QDataStream(QByteArray *a, QIODevice::OpenMode mode)
QDataStream(const QByteArray &a)
QDataStream &readBytes(char *&s, uint &l)
int readRawData(char *s, int len) //从数据流里读取len个数据
QDataStream &operator<<(const char *s) //向数据流里存入数据
QDataStream &operator>>(const char *s) //从数据流里读取数据
4、QFileInfo类-----获取文件信息
QFileInfo用于管理文件的信息(文件的大小、文件名、创建时间、后缀等等)。
5、QDir类-----文件目录
用于管理文件的目录:QDir类
QDir(const QDir &dir)
QDir(const QString &path = QString())
QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)
QString absoluteFilePath(const QString &fileName) const //获取文件的绝对路径
QString absolutePath() const//获取文件的绝对路径,不包含文件名
bool cd(const QString &dirName) //QDir dir dir.cd("D:/") 切换到不同的目录 ,切换成功--true,切换失败--false
QString dirName() const //获取目录的名称
bool mkdir(const QString &dirName) const //创建目录
bool mkpath(const QString &dirPath) const
bool remove(const QString &fileName) //移除文件
bool rmdir(const QString &dirName) const //移除文件包括路径,使用时尤其注意
bool rmpath(const QString &dirPath) const