目录
一、Qt常用头文件
1.
(1) Qt 中的数据类型定义
(2) 常用函数
(3) 常用宏
2.
二、Qt容器类
1.顺序容器
(1)QList
(2)QLinkedList
(3)QVector
(4)QStack
(5)QQueue
2.关联容器
(1)QMap
(2)QMultiMap
(3)QHash
(4)QMultiHash
(5)QSet
Qt 数据类型 | 等效定义 | 字节数 | 备注 |
---|---|---|---|
qint8 | signed char | 1 | |
qint16 | signed short | 2 | |
qint32 | signed int | 4 | |
qint64 | long long int | 8 | |
qlonglong | long long int | 8 | |
quint8 | unsigned char | 1 | |
quint16 | unsigned short | 2 | |
quint32 | unsigned int | 4 | |
quint64 | unsigned long long int | 8 | |
qulonglong | unsigned long long int | 8 | |
uchar | unsigned char | 1 | |
ushort | unsigned short | 2 | |
uint | unsigned int | 4 | |
ulong | unsigned long | 8 | |
qreal | double | 8 | |
qfloat16 | 2 | Qt 5.9.0 中新增的一个类,用于表示 16 位的浮点数,使用时,需要包含头文件 |
若是以 double 或 float 类型数作为参数的,一般有两个参数版本的同名函数。(下面表格,若存在 double 和 float 两种参数版本,只列出 double 类型参数的版本)
函数 | 功能 |
---|---|
T qAbs(const T &value) | 返回变量 value 的绝对值 |
const T &qBound(const T &min, const T&value, const T &max) | 返回 value 限定在 min 至 max 范围之内的値 |
bool qFuzzyComparc(doublc p1, double p2) | 若 p1 和 p2 近似相等,返回 true |
bool qFuzzyIsNulI(double d) | 如果参数 d 约等于 0,返回 true |
double qInf(() | 返回无穷大的数 |
bool qIsFinite(double d) | 若 d 是一个有限的数,返回 true |
bool qIsInf(double d) | 若 d 是一个无限大的数,返回 true |
bool qIsNaN(double d) | 若 d 不是一个数,返回 true |
constT&qMax(const T&value1, const T&value2) | 返回 value1 和 value2 中较大的值 |
const T &qMin(const T&value1, const T&value2) | 返回 value1 和 value2 中较小的值 |
qint64 qRound64(double value) | 将 value 近似为最接近的 qint64 整数 |
int qRound(double value) | 将 value 近似为最接近的 int 整数 |
int qrand() | 标准 C++ 中 rand() 函数的线程安全型版本,返回 0 至 RAND_MAX 之间的伪随机数 |
void qsrand(uint seed) | 标准 C++ 中 srand() 函数的线程安全型版本,使用种子 seed 对伪随机数字序列初始化 |
1.QT_VERSION:这个宏展开为数值形式 0xMMNNPP (MM = major, NN = minor, PP = patch) 表示 Qt 编译器版本,例如 Qt 编译器版本为 Qt 5.9.1,则 QT_VERSION 为 0x050901。这个宏常用于条件编译设置,根据 Qt 版本不同,编译不同的代码段。
2.QT_VERSION_CHECK:这个宏展开为 Qt 版本号的一个整数表示
3.QT_VERSION_STR:这个宏展开为 Qt 版本号的字符串,如“5.9.0”
4.Q_BYTE_ORDER、Q_BIG_ENDIAN 和 Q_LITTLE_ENDIAN:Q_BYTE_ORDER 表示系统内存中数据的字节序,Q_BIG_ENDIAN 表示大端字节序,Q_LITTLE_ ENDIAN 表示小端字节序。在需要判断系统字节序时会用到
5.Q_DECL_IMPORT 和 Q_DECL_EXPORT:在使用或设计共享库时,用于导入或导出库的内容
6.Q_DECL_OVERRIDE:在类定义中,用于重载一个虚函数
7.Q_DECL_FINAL:这个宏将一个虚函数定义为最终级别,不能再被重载,或定义一个类不能再被继承
8.Q_UNUSED(name):用于在函数中定义不在函数体里使用的参数,如果不用 QJJNUSED 定义,编译器会出现参数未使用的警告。
9.foreach(variable, container):foreach 用于容器类的遍历
10.forever:forever用于构造一个无限循环
11.qDebug(const char * message,…):在debugger窗体显示信息,如果编译器设置了 Qt_NO_DEBUG_OUTPUT,则不作任何输出
void MainWindow::TestGlobalFun()
{
if(QT_VERSION>=QT_VERSION_CHECK(5,10,0))
{
qDebug("Version greater than 5.10.0");
}else{
qDebug("Version less than 5.10.0");
}
int num1=10,num2=20;
int num=qMin(num1,num2);
qDebug("num1 and num2,min is %d",num);//10
}
函数 | 功能 |
---|---|
T qAbs(const T &value) | 返回变量 value 的绝对值 |
#include
#include
void MainWindow::TestMathFun()
{
double value=qSin(30*Pi/180);
qDebug("%f",value);//0.500000
double num= qLn(1)/qLn(2);//log2(1)=0
qDebug()<
Qt提供了多个基于模板的容器类,这些容器类可以用于存储指定类型的数据项。Qt 的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储优化,因此可以减少可执行文件的大小。此外,它们还是线程安全的,也就是说它们作为只读容器时可被多个线程访问。
容器类是基于模板的类,如常用的容器类 QList
Qt 的容器类分为顺序容器和关联容器。
Qt 的顺序容器类有 QList、QLinkedList、QVector、QStack 和 QQueue。
QList 是最常用的容器类,它以下标索引的方式对数据项进行访问。QList 用于添加、插入、替换、移动、删除数据项的函数有:insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst() 和 removeLast() 等。
#include
void TestQList()
{
QList _list;
_list<<1<<2;
_list.append(3);
_list.insert(0,0);
qDebug("_list size:%d",_list.size());//4
foreach(const int i , _list){
qDebug("%d",i);//0 1 2 3
//qDebug()<
QLinkedList
#include
#include
void TestQLinkedList()
{
QLinkedList _linked_list;
_linked_list<<"hello"<<"world";
_linked_list.append("HELLO");
_linked_list.insert(_linked_list.begin()+2,"WORLD");
qDebug("_linked_list size:%d",_linked_list.size());//4
for(QLinkedList::iterator iter=_linked_list.begin();iter!=_linked_list.end();iter++)
{
qDebug()<<*iter;//"hello"
//"world"
//"WORLD"
//"HELLO"
}
foreach(QString str,_linked_list)
{
qDebug()<
QVector 的数据项是连续存储的。 QStack QQueue Qt 还提供关联容器类 QMap、QMultiMap、QHash、QMultiHash 和 QSet。 QMap 如果在映射表中没有找到指定的键,会返回一个缺省构造值,例如,如果值的类型是字符串,会返回一个空的字符串。在使用 value() 函数查找键值时,还可以指定一个缺省的返回值。 QMultiMap 是 QMap 的子类,是用于处理多值映射的便利类。多值映射就是一个键可以对应多个值。QMap 正常情况下不允许多值映射,除非使用 QMap::insertMulti() 添加键值对。 QMap 的大多数函数在 QMultiMap 都是可用的,但是有几个特殊的,QMultiMap::insert() 等效于 QMap::insertMulti() , QMultiMap::replace() 等效于 QMap::insert()。 QHash 是基于散列表来实现字典功能的模板类,QHash QHash 与 QMap 的功能和用法相似,区别在于以下几点: QMultiHash 是 QHash 的子类,是用于处理多值映射的便利类,其用法与 QMultiMap 类似。 QSet 是基于散列表的集合模板类,它存储数据的顺序是不定的,查找值的速度非常快。 QSet
void TestQVector()
{
QVector
(4)QStack
#include
(5)QQueue
#include
2.关联容器
(1)QMap
#include
(2)QMultiMap
#include
(3)QHash
#include
(4)QMultiHash
#include
(5)QSet
#include