QT的学习第一部分

一、QT的基础知识框图

二、QT的安装

三种方式任选一个下载:

Download Qt OSS: Get Qt Online Installer

Index of /official_releases/online_installers

Index of /archive/online_installers

三、基础工具类

1、调试输出qDebug宏

(1)QMessageLogger类的宏

qDebug(): 用于输出调试级别的日志消息,也就是调试信息。

qInfo(): 用于输出信息级别的日志消息,表明程序的正常运行状态。

qWarning(): 用于输出警告级别的日志消息,表明可能出现的问题或潜在的错误,但程序不会终止。

qCritical(): 用于输出严重错误级别的日志消息,表明程序遇到严重的错误,但程序可以继续执行。

(2)消息级别的高低

qDebug():调试级别 < qInfo():信息级别 < qWarning():警告级别 < qCritical():严重错误级别 < qFatal():致命错误级别

(3)qDebug()输出的基本形式

2、QString类字符串操作函数

(1)什么是QString

QString 是由 QtCore 模块提供的。在 Qt 框架中, QString 是一个非常重要的类,用于处理和操作文本字符串。 它封装了 Unicode 字符串,可以支持多种编码格式,并提供了许多用于字符串操作的方法。

头文件: #include <QString>

指定添加QtCore模块:QT += core

(2)QString类字符串处理函数和方法

①C++的string类对象转换成QString的类对象

②判断字符串中是否包含指定子串:bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

Qt类是Qt中的一个基本的基类。

Qt::CaseSensitivity:指定搜索时是否区分大小写,一个枚举类型。

有如下的两个值:

Qt::CaseInsensitive: 表示不区分大小写。

Qt::CaseSensitive :表示区分大小写。

③计算字符中包含指定子串的个数:int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

④检测字符串的后缀是什么字符串结尾:bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

⑤从头开始查找str位置,返回位置,如果没有查询到返回-1:int indexOf(const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

⑥QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) 提供一个字符来删除字符串中所有匹配的字符。 QChar::isSpace可以删除所有空白字符(如空格、制表符、换行符等)。

⑦QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)提供一个 QString类型的子字符串来删除匹配的子字符串,此方法会删除所有匹配的子字符串。

3、QByteArray类

(1)什么是QByteArray

QByteArray继承自QList<char> 类,可以处理字符数组二进制数据,常用于文件读取、网络通信和其他涉及原始字节流的场景。

(2)QByteArray类处理函数和方法

①构造函数

QByteArray(): 创建一个空的字节数组。

QByteArray(const char *data): 用一个 C 风格的字符串初始化。

QByteArray(const QByteArray &other): 拷贝构造函数,复制另一个 QByteArray。

QByteArray(int size, char ch): 创建一个指定大小的字节数组,并用指定的字符填充。

②数据访问

const char *data() const: 返回指向字节数据的指针。

at(int index): 返回数组中指定位置的字节。

operator\[\]: 通过索引访问元素。

③修改数据

append(const QByteArray &ba): 在当前字节数组的末尾追加另一个 QByteArray。

prepend(const QByteArray &ba): 在当前字节数组的开始处添加另一个 QByteArray。

replace(int index, int len, const QByteArray &ba): 替换字节数组中指定位置的内容。

remove(int index, int len): 删除指定位置的字节。

④查找和比较

contains(const QByteArray &ba): 判断字节数组是否包含另一个字节数组。

indexOf(const QByteArray &ba): 查找某个字节数组在当前字节数组中的位置。

startsWith(const QByteArray &ba): 检查字节数组是否以某个字节数组开始。

endsWith(const QByteArray &ba): 检查字节数组是否以某个字节数组结束。

⑤大小和容量

size(): 返回字节数组的大小(字节数)。

isEmpty(): 判断字节数组是否为空。

⑥QByteArray 转换为 QString以及QString 转换为 QByteArray

四、信号与槽函数

信号与槽:Qt 中用于对象间通信的一种机制,当某个对象发射信号时,与之连接的另一个对象的槽函数会自动被调用。

信号与槽的实现机制:

①MOC 编译:Qt 的元对象编译器(MOC)为包含 Q_OBJECT 宏的类生成元数据代码,并自动实现信号函数的定义。

②连接记录:connect() 函数将信号与槽的对应关系以列表形式存储在该对象的内部数据结构中。

③触发调用:发射信号时,通过元对象系统查找所有已连接的槽,并根据线程情况(直接调用或队列调用)依次执行这些槽函数。

1、自己编辑信号与槽

信号与槽的形式:

①一个信号对应多个槽 ②多个信号对应一个槽

2、Designer编辑信号与槽

①自动生成信号和槽函数

设置信号和槽函数

返回可视化界面

②自动生成信号,自己编辑槽函数

点击转到槽,选择clicked()信号

生成槽函数,手动编辑

五、基础窗口类

1、什么是窗口类

窗口类:一个程序可以拥有多个窗口,每个窗口都会承载多个控件。所有的窗口和控件都是直接或者间接的继承自QWidget类,QWidget类是所有窗口对象的基类。

2、常用的窗口类

QWidget :用于创建自定义窗口和部件,它是许多其他窗口类的基类。

QMainWindow :基类是 QWidget,用于创建主窗口应用程序,通常包含菜单、工具栏和中央工作区。

QDialog :基类是QWidget,用于创建对话框窗口,通常用于交互式用户输入或操作。

QTabWidget :基类是 QWidget,用于创建带有选项卡的窗口,允许用户在不同选项卡之间切换内容。QTabBar 是一个用于显示和管理选项卡(Tabs)的部件,而 QTabWidget 则是建立在QTabBar 的基础上,提供了一个完整的选项卡式界面,可以容纳多个页面,每个页面对应一个选项卡。

3、QWidget 类窗口

QWidget 类的构造函数为:explicit QWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

explicit 是一个 C++ 关键字,用于禁止构造函数或类型转换运算符的隐式类型转换,必须显式调用才能完成构造或转换。

参数一:parent

parent为父窗口。

参数二:f

构造窗口的标志,控制窗口的类型和外观。

主要有以下设置:

cpp 复制代码
Qt::FramelessWindowHint 没有边框的窗口。
Qt::WindowStaysOnTopHint 总是最上面的窗口。
Qt::CustomizeWindowHint 自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏。
Qt::WindowTitleHint 显示窗口标题栏。
Qt::WindowSystemMenuHint 显示系统菜单。
Qt::WindowMinimizeButtonHint 显示最小化按钮。
Qt::WindowMaximizeButtonHint 显示最大化按钮。
Qt::WindowMinMaxButtonsHint 显示最小化按钮和最大化按钮。
Qt::WindowCloseButtonHint 显示关闭按钮。
Qt::Window 设置为独立窗口,独立于其他窗口的顶级窗口,它不依赖于其他窗口的存在而存在(除了其基类窗口之外),并且可以独立地进行操作和管理。

无边框和总是在最上面的窗口设置:

自定义窗口的设置:

父子窗口的设置:

cpp 复制代码
获得窗口标题:QString windowTitle() const;
设置窗口标题为text:void setWindowTitle(const QString &text); 
窗口高度:int height() const;
窗口宽度:int width() const;
将窗口左上角移动到坐标(x,y)处:void move(int x, int y);
设置固定大小,窗口大小固定不变:void setFixedSize(int width, int height);
将窗口的宽度改为w, 高度改为h:void resize(int w, int h);
判断窗口是否可见:bool isVisible() const;
判断窗口是否隐藏:bool isHidden() const;
等价于是否隐藏:void setHidden(bool hidden);
显示窗口,等价于 setVisible(true):void show();
隐藏窗口,等价于 setHidden(true):void hide();
判断窗口是否为最小化:bool isMinimized() const;
判断窗口是否为最大化:bool isMaximized() const;
判断窗口是否为全屏:bool isFullScreen() const;
一个槽函数,以最小化方式显示窗口:void showMinimized();
一个槽函数,被调用时候向本窗口发送一个关闭事件:bool close();

4、QMainWindow类窗口

QMainWindow是继承与QWidget,是用于构建应用程序用户界面的框架,QMainWindow类用于主窗口管理。您可以在其中添加QToolBar:工具栏、QDockWidget:停靠栏、QMenuBar:菜单栏、 QStatusBar:状态栏。常见的成员函数addAction:添加子按钮、addToolBar:添加工具栏、 showMessage:设置状态栏文本描述。

QMainWindow的布局示意图:

创建MainWindows的基础窗口:

Mainwindows中的QDockWidget:

实现可停靠的面板或工具窗口,如图像编辑软件中的工具栏、文件浏览器或调试窗口等。

cpp 复制代码
常见的构造函数:QDockWidget(const QString &title, QWidget *parent = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags());

常用的成员函数:
设置允许的停靠区域:
     void setAllowedAreas(Qt::DockWidgetAreas areas);
设置停靠的子控件
        void setWidget(QWidget *widget);
设置停靠窗口的停靠位置
        void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget);

六、基础组件类

1、QLabel标签

QLabel是QFrame的派生类,QFrame是QWidget的派生类。

QLabel独有的常用功能:

cpp 复制代码
void setAlignment(Qt::Alignment) //设置文本位置
void clear() //清除文本
void setMovie(QMovie *movie) //设置动画影视
void setNum(double num) //设置数值,double或int
void setNum(int num)
void setPicture(const QPicture &picture)//设置pic图片    
void setPixmap(const QPixmap &)//设置像素图
void setText(const QString &)   //设置文本
void setBuddy(QWidget *buddy)  //设置伙伴关系组件
QString text() const; //获取标签的文本

创建文本标签和图片标签:

2、QPushButton按钮

按钮是作为窗口中最常见的小部件,典型的按钮包括 "确定" "应用" "取消" "关闭" "是" "否" "帮助"等。

cpp 复制代码
类名:QPushButton 
Header:  #include <QPushButton>
qmake:   QT += widgets
Inherits: QAbstractButton (基类)
Inherited By: QCommandLinkButton(派生类)

①QPushButton 类的构造函数

cpp 复制代码
QPushButton(QWidget *parent = nullptr)
QPushButton(const QString &text, QWidget *parent = nullptr)
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)

②QPushButton 类中常用成员接口

cpp 复制代码
1)设置按钮的位置和大小,其中x和y表示按钮的左上角坐标,width和height表示按钮的宽度和高度。
    setGeometry(int x, int y, int width, int height)
2)设置按钮的固定大小,即按钮的宽度和高度。如果用户尝试调整按钮大小,控件将保持不变。因此,使用 setFixedSize 的控件不能自适应窗口大小。
    setFixedSize(int width, int height)
3)重新设置按钮的大小,即改变按钮的宽度和高度。使用resize 的控件可以自适应窗口大小。
    resize(int width, int height)
4)移动按钮到指定的坐标位置,其中x和y表示按钮的左上角坐标。
    move(int x, int y)
5)设置按钮上显示的文本。
    setText(const QString& text):
6)获取按钮上显示的文本。
    text() const:

创建图标按钮:

3、QLineEdit单行输入框

QLineEdit 是一个单行文本编辑器,允许用户使用有用的编辑功能集合输入和编辑单行纯文本,包括撤消和重做、剪切和粘贴以及拖放等功能。

cpp 复制代码
类名:QLineEdit
Header:  #include <QLineEdit>
qmake: QT += widgets
Inherits: QWidget

①QLineEdit类的构造函数

cpp 复制代码
QLineEdit(QWidget *parent = nullptr)
QLineEdit(const QString &contents, QWidget *parent = nullptr)

②QLineEdit类中常用成员

cpp 复制代码
void  setEchoMode(QLineEdit::EchoMode):设置回显模式
    QLineEdit::Normal                在输入字符时显示字符。这是默认值。
    QLineEdit::NoEcho                不显示任何内容。这可适用于密码,甚至密码的长度也应保密。
    QLineEdit::Password              显示与平台相关的密码掩码字符,而不是实际输入的字符。
    QLineEdit::PasswordEchoOnEdit    在编辑时显示输入的字符,否则显示字符,如 .Password
void setAlignment(Qt::Align flag):设置文本位置
    Qt::AlignLeft      0x0001                        与左边缘对齐。
    Qt::AlignRight     0x0002                        与右边缘对齐。
    Qt::AlignHCenter   0x0004                        在可用空间中水平居中。
    Qt::AlignJustify   0x0008                        对齐可用空间中的文本。
    Qt::AlignTop       0x0020                        与顶部对齐。
    Qt::AlignBottom    0x0040                        与底部对齐。
    Qt::AlignVCenter   0x0080                        在可用空间中垂直居中。
    Qt::AlignBaseline  0x0100                        与基线对齐。
    Qt::AlignCenter    AlignVCenter | AlignHCenter   两个维度的中心。
QString  text()const:获取输入框里面的内容 ,信号与槽搭配使用机制:确保框里面要有内容之后再去调用这个函数
void setText(QString& str):设置文本框内容

创建一个密码输入文本框:

4、QTextEdit文本编辑框

QTextEdit 是一个高级的所见即所得查看器/编辑器,支持使用 HTML 样式标签或 Markdown 格式进行富文本格式设置。它经过优化,可处理大型文档并快速响应用户输入。

cpp 复制代码
 类名: QTextEdit
 Header:  #include <QTextEdit>
 qmake: QT += widgets
 Inherits: QAbstractScrollArea
 Inherited By: QTextBrowser

①QTextEdit类的构造函数

cpp 复制代码
QTextEdit(QWidget *parent = nullptr)
QTextEdit(const QString &text, QWidget *parent = nullptr)

②QTextEdit类中常用成员

cpp 复制代码
toPlainText():返回当前文本编辑器中的纯文本内容,去掉所有格式。
setPlainText(const QString &text):设置文本编辑器的内容为纯文本。
toHtml():返回当前文本编辑器中的HTML格式内容。
setHtml(const QString &html):设置文本编辑器的内容为HTML格式文本。
append(const QString &text):向文本编辑器的末尾追加纯文本内容。
undo():撤销上一次操作。
redo():重做上一次撤销的操作。
clear():清空文本编辑器中的所有内容。
setFontFamily(const QString &family):设置文本的字体族
setFontPointSize(qreal pointSize):设置文本的字号。
void QTextEdit::insertPlainText(const QString &text):追加文本不换行
setFont(QFont):设置字体

文本框的编辑:

5、QProgressBar进度条

cpp 复制代码
Header:  #include <QProgressBar>
qmake: QT += widgets
inherits: QWidget 

①QTextEdit类的构造函数

cpp 复制代码
QProgressBar(QWidget *parent = nullptr)

②QTextEdit类中常用成员

cpp 复制代码
功能函数:
int minimum() const:返回进度条的最小值。
void setMinimum(int minimum):设置进度条的最小值。
int maximum() const:返回进度条的最大值。
void setMaximum(int maximum):设置进度条的最大值。
int value() const:返回进度条的当前值。
void setValue(int value):设置进度条的当前值。
bool isTextVisible() const:返回是否显示进度条的文本标签。
void setTextVisible(bool visible):设置是否显示进度条的文本标签。
QString format() const:返回进度条的文本格式字符串。
void setFormat(const QString &format):设置进度条的文本格式字符串。
QSize sizeHint() const:返回控件的首选大小。
Qt::Alignment alignment() const:返回进度条的对齐方式。
void setAlignment(Qt::Alignment alignment):设置进度条的对齐方式。
void reset():重置进度条为最小值。
void setRange(int minimum, int maximum):设置进度条的最小值和最大值。
void setInvertedAppearance(bool invert):设置是否反转进度条的外观。
void setOrientation(Qt::Orientation orientation):设置进度条的方向,可以是Qt::Horizontal或Qt::Vertical。
Qt::Orientation orientation() const:返回进度条的方向。
void setTextDirection(QProgressBar::Direction direction):设置进度条文本标签的方向。
QProgressBar::Direction textDirection() const:返回进度条文本标签的方向。
void setMinimumWidth(int width):设置进度条的最小宽度。
void setMinimumHeight(int height):设置进度条的最小高度。

创建进度条的显示动画:

6、QComboBox下拉式列表

cpp 复制代码
Header:  #include <QComboBox>
qmake : QT += widgets
Inherits: QWidget
inherited By: QFontComboBox

①QComboBox类的构造函数

cpp 复制代码
explicit QComboBox(QWidget *parent = nullptr);
使用给定的父窗口构造一个 QComboBox 对象。

②QComboBox类中常用成员

cpp 复制代码
addItem(const QString &text, const QVariant &userData = QVariant()):向下拉列表中添加一个带有指定文字和可选用户数据的条目。
setCurrentIndex(int index):设置当前所选项目的索引。
QString currentText() const:返回当前所选项目的文本。
int currentIndex() const:返回当前所选项目的索引。
clear():清除所有的条目。
count():返回下拉列表中的条目数。
setEditable(bool editable):设置下拉列表框是否可以编辑。

创建有图标的下拉列表:

7、QListWidget 显示列表控件

cpp 复制代码
类名:QListWidget
Header:  #include <QListWidget>
qmake: QT += widgets
Inherits: QListView

①QListWidget 类的构造函数

cpp 复制代码
QListWidget(QWidget *parent = nullptr)

②QListWidget 类中常用成员

cpp 复制代码
成员函数:
addItem(item: QListWidgetItem): 向列表中添加一个列表项。
void addItems(const QStringList &labels): 向列表中批量添加多个字符串列表项。
takeItem(row: int): 移除并返回指定行的列表项。
clear(): 清空列表中的所有项。
QList<QListWidgetItem*> QListWidget::findItems(const QString &text, Qt::MatchFlags flags) const:在列表中搜索匹配指定文本的所有项,返回匹配项的列表。
    text:要查找的文本。可以是完整的字符串,也可以是部分字符串(取决于匹配模式)。
    flags:指定匹配模式的标志,类型为Qt::MatchFlags,常用的匹配模式包括:
                     Qt::MatchExactly:完全匹配(默认)。
                     Qt::MatchContains:包含指定文本。
                     Qt::MatchStartsWith:以指定文本开头。
                     Qt::MatchEndsWith:以指定文本结尾。
                     Qt::MatchCaseSensitive:区分大小写(可以与其他模式组合使用)。
                     Qt::MatchRegularExpression:使用正则表达式匹配。
                     Qt::MatchWildcard:使用通配符匹配。
item(row: int) -> QListWidgetItem: 返回指定行的列表项即item。
currentItem() -> QListWidgetItem: 返回当前选中的列表项。
setCurrentItem(item: QListWidgetItem): 设置当前选中的列表项。
currentRow() -> int: 返回当前选中的列表项的行号。
setCurrentRow(row: int): 设置当前选中的列表项的行号。
count() -> int: 返回列表中的项数。
row(item: QListWidgetItem) -> int: 返回指定列表项的行号。
sortItems(order: Qt.SortOrder = Qt.AscendingOrder): 按列表项文本内容进行升序(默认)或降序排序。
        order: 排序顺序,类型为 Qt::SortOrder。
可以是:
        Qt::AscendingOrder(默认值):升序排序。
        Qt::DescendingOrder: 降序排序。
void setItemWidget(QListWidgetItem *item, QWidget *widget):把自定义控件绑定到item
QWidget *itemWidget(QListWidgetItem *item) const:通过item返回对相应的自定义控件对象
QListWidgetItem中的setSizeHint:设置item高度和宽度

创建显示列表,查找包含mp3的选项:

自定义列表项控件:

(1)mainwindow.ui:设计界面,添加标签Label和列表List View。

(2)创建一个新的UI界面mylist.ui文件。

(3)mylist.ui:设计一个自己喜欢的列表界面。

(4)mainwindow.cpp:构造函数中创建自定义的列表控件