QT中包含很多模块,这些模块都是建立在常用数据类型和容器基础之上的。本篇简单介绍一下常用模块,常用数据类型,常用容器类。
目录
1.QT模块分类
2.QT基本数据类型
3.QString和QByteArray区别
4.QT中的容器
(1)Qt模块主要分为以下
(2)Qt基本模块
(3)Qt附加模块
(4)Qt增值模块
(5)Qt技术预览模块
(6)Qt工具模块
(1)各种类型字符串
(2)QByteArray与QString
QByteArray 是 c 语言中 char* 的升级版本。
构造方法:
// 构造空对象, 里边没有数据
QByteArray::QByteArray();
// 将data中的size个字符进行构造, 得到一个字节数组对象
// 如果 size==-1 函数内部自动计算字符串长度, 计算方式为: strlen(data)
QByteArray::QByteArray(const char *data, int size = -1);
// 构造一个长度为size个字节, 并且每个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);
QString 也是封装了字符串,但是内部的编码为 utf8, UTF-8 属于 Unicode 字符集,它固定使用多个字节(window为2字节, linux为3字节)来表示一个字符。构造方法:
// 构造一个空字符串对象
QString::QString();
// 将 char* 字符串 转换为 QString 类型
QString::QString(const char *str);
// 将 QByteArray 转换为 QString 类型
QString::QString(const QByteArray &ba);
从QString构造函数可以看出QString是对QByteArray的封装。可以通过构造函数直接从QByteArray来构造QS同日那个
QString转QByteArray一般使用如下方法:
QByteArray QString::toUtf8() const;
(3)QString数值类型处理
QString str = "101010";
//以二进制字符串方式读入
qDebug() << QString::number(str.toInt(nullptr, 2));
str = "0FF";
qDebug() << QString::number(str.toInt(nullptr, 16));
//浮点数保留两位有效数字,三种写法均可以
qDebug() << QString::number(123.234, 'f', 2);
qDebug() << QString::asprintf("%.2f", 123.234);
qDebug() << str.setNum(123.234, 'f', 2);
//转为二进制字符串
qDebug() << str.setNum(110, 2);
//转为十六进制字符串
qDebug() << str.setNum(110, 16);
运行结果:
4.1容器分类
4.2 Java类型迭代器
4.3 STL类型迭代器
代码举例:
//顺序容器使用
//遍历
// 正向遍历
QList strList;
strList << "不知道" << "nihao" << "hello" << "abc" << "123";
QListIterator i(strList);
while (i.hasNext()) {
qDebug() << i.next(); //返回数据,并跳过一项
}
// 反向遍历
i.toBack();
while (i.hasPrevious()) {
qDebug() << i.previous();
}
// 修改
QList iList;
iList << 111 << 2 << 333 << 4 << 5;
QMutableListIterator mi(iList);
while (mi.hasNext()) {
if (0 == mi.next() % 2) {
mi.remove();
}
}
mi.toFront();
while (mi.hasNext()) {
qDebug() << mi.next();
}
//关联容器使用
QMap strMap;
strMap.insert("Beijing", "China");
strMap.insert("Paris", "France");
strMap.insert("New York", "USA");
strMap.insert("Mexico", "USA");
strMap.insert("Moscow", "Russia");
QMutableMapIterator mapI(strMap);
while (mapI.hasNext()) {
if (mapI.next()->endsWith("York")) {
mapI.remove();
}
}
mapI.toFront();
while (mapI.hasNext()) {
auto item = mapI.next();
qDebug() << item.key() << " " << item.value();
}
strList.clear();
strList << "A" << "B" << "C";
QList::const_iterator ci;
for(ci = strList.begin(); ci != strList.end(); ++ci) {
qDebug() << *ci;
}
strMap.clear();
strMap.insert("1", "111");
strMap.insert("2", "222");
strMap.insert("3", "333");
strMap.insert("4", "444");
QMap::iterator iit;
for(iit = strMap.begin(); iit != strMap.end(); ++iit) {
qDebug() << iit.key() << " " << iit.value();
}//顺序容器使用
//遍历
// 正向遍历
QList strList;
strList << "不知道" << "nihao" << "hello" << "abc" << "123";
QListIterator i(strList);
while (i.hasNext()) {
qDebug() << i.next(); //返回数据,并跳过一项
}
// 反向遍历
i.toBack();
while (i.hasPrevious()) {
qDebug() << i.previous();
}
// 修改
QList iList;
iList << 111 << 2 << 333 << 4 << 5;
QMutableListIterator mi(iList);
while (mi.hasNext()) {
if (0 == mi.next() % 2) {
mi.remove();
}
}
mi.toFront();
while (mi.hasNext()) {
qDebug() << mi.next();
}
//关联容器使用
QMap strMap;
strMap.insert("Beijing", "China");
strMap.insert("Paris", "France");
strMap.insert("New York", "USA");
strMap.insert("Mexico", "USA");
strMap.insert("Moscow", "Russia");
QMutableMapIterator mapI(strMap);
while (mapI.hasNext()) {
if (mapI.next()->endsWith("York")) {
mapI.remove();
}
}
mapI.toFront();
while (mapI.hasNext()) {
auto item = mapI.next();
qDebug() << item.key() << " " << item.value();
}
strList.clear();
strList << "A" << "B" << "C";
QList::const_iterator ci;
for(ci = strList.begin(); ci != strList.end(); ++ci) {
qDebug() << *ci;
}
strMap.clear();
strMap.insert("1", "111");
strMap.insert("2", "222");
strMap.insert("3", "333");
strMap.insert("4", "444");
QMap::iterator iit;
for(iit = strMap.begin(); iit != strMap.end(); ++iit) {
qDebug() << iit.key() << " " << iit.value();
}
运行效果: