1. 类名、枚举必须使用大驼峰命名法(帕斯卡命名法),即每个单词的首字母大写,例如ComputerInfo.h;Qt自带的类都是以Q开头的。
2. 函数、变量名使用小驼峰命名法(驼峰命名法),即第一个单词全小写,其它单词的首字母大写,例如autoFillBackground、backgroundRole。
3. 常量使用全大写,单词之间使用下划线分割。
QString类是Qt中的字符串类,Qt中不使用char*和std:string。QString类使用Unicode编码(统一码、万国码),而不是ASCII码。每一个字符都是一个16位的QChar,而不是8位的char,所以QString处理中文没有任何问题,而且一个汉字算作一个字符。QString类不需要单独引入头文件。
数字转字符串
[static]
参数一:要转换的整数
参数二:进制,默认为十进制
返回值:转换之后的字符串
参数一:要转换的整数
参数二:进制,默认为十进制
返回值:转换之后的字符串,支持链式调用
字符串转数字
参数一:转换的结果
参数二:进制,默认为10进制
返回值:转换的结果
Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。Qt中的容器类对Qt环境单独做了存储上的速度优化,并且是线程安全(可以同时被多线程访问)的,还可以降低编译生成的可执行文件大小。
QList类是Qt中最常用的容器类,QList是一种顺序容器。
QList list;
// 增加数据
list.append("hello"); //向后追加
list.prepend("abc"); //向前追加
list.push_back("向后追加");
list.push_front("向前追加");
list << "你好" << "再见" << "AAA" << "2022";
// 参数一:位置
// 参数二:插入的元素
list.insert(1,"第二");
// 支持直接输出
qDebug() << list;
// 删除数据
list.pop_back(); // 删除最后一个数据
list.pop_front(); // 删除开始的数据
list.removeFirst(); // 删除第一个数据
list.removeLast(); // 删除最后一个数据
qDebug() << list;
list.append(list);
list << "再见"; // 已出现3次"再见"
qDebug() << list;
// 删除第一次出现的某元素值
list.removeOne("hello");
// 删除固定位置的元素
list.removeAt(4);
// 删除所有 某元素
list.removeAll("再见");
qDebug() << list << "元素数:" << list.size() << list.length() << list.count();
// 修改元素
list.replace(1,"第二");
qDebug() << list.at(1) << list[1];
// 遍历
// for循环
for(int i=0;i::const_iterator iter = list.begin();
iter != list.end();iter++)
{
qDebug() << *iter;
}
// Java 风格迭代器
QListIterator iter(list);
while(iter.hasNext()) // 判断后续还有无数据
{
qDebug() << iter.next(); //先获得后面的元素,再向后移动一个位置
}
建议使用C++ STL风格或Java风格的迭代器遍历。
是一个存储元素类型为QString的QList类,其基类是QList
创建步骤如下:
1. 选中项目,鼠标右键,点击“添加新文件”。
2. 在弹出的窗口中,按照下图方式选择后,点击“选择”
3. 在弹出的窗口中输入类名,然后点击“下一步”。
4. 直接点击"完成",创建完毕。
QMap是Qt中的关联容器,基本等同C++ STL中的map类型。
map是键值对的映射,键(key)表示数据的名称,值(value)表示数据值本身。键必须是唯一,但值可以不唯一。
QMap map;
// 添加数据
map["身高"] = 168;
map.insert("体重",110);
// 取出数据之前最好先判断一下是否存在
if(map.contains("身高"))
{
// 取出数据
// value支持第二个参数设定默认值
// 如果使用value函数取出值可以不判断是否存在键
qDebug() << map["身高"] << map.value("身高");
}
// 移除身高键值对
map.remove("身高");
qDebug() << map.size() << map.count();
// 修改
map["体重"] = 120;
map.insert("体重",130);
qDebug() << map.value("体重");
qDebug() << map.value("年龄",-1);
// C++ STL风格迭代器
for(QMap::const_iterator iter=map.begin();
iter != map.end();iter++)
{
qDebug() << iter.key() << iter.value();
}
// Java风格迭代器
QMapIterator iter(map);
while(iter.hasNext())
{
iter.next(); // 先移动
// 取出键值对
qDebug() << iter.key() << iter.value();
}
为了确保Qt在各个平台拥有统一的数据类型长度,Qt设定了一些数据类型在跨平台时代替传统的数据类型。
是Qt中的通用数据类型,绝大多数Qt的常用类型都可以与此类型互相转换。
使用构造函数来让其它数据类型转换为QVariant类型,使用to开头的转换函数转换回源类型。
// 跨平台数据类型
qint64 a = 12345678;
int b = a;
qDebug() << a << b;
// 转换为通用类型
QVariant v(a);
qDebug() << v.toInt();
// qDebug() << v.toString(); 间接完成“类型转换”
Qt中使用QDate类来处理日期,使用QTime类来处理时间,这两个类合二为一QDateTime类,即QDateTime类既可以处理日期又可以处理时间。
返回当前时间(毫秒数)
获得当前时间的QDateTime对象,分别为当前时区和东一区。
需要注意的是,获取的时间是基于本机时间。
返回制定格式的时间和日期字符串,参数是制定的格式
常用格式如下:
字符 |
意义 |
d |
天,不补零显示,1-31 |
dd |
天,补零显示,01-31 |
M |
月,不补零显示,1-12 |
MM |
月,补零显示,01-12 |
yy |
年,两位显示,00-99 |
yyyy |
年,4位数字显示,如 2016 |
h |
小时,不补零,0-23 或 1-12 (如果显示 AM/PM) |
hh |
小时,补零2位显示,00-23 或 01-12 (如果显示 AM/PM) |
H |
小时,不补零,0-23 (即使显示 AM/PM) |
HH |
小时,补零显示,00-23 (即使显示 AM/PM) |
m |
分钟,不补零,0-59 |
mm |
分钟,补零显示,00-59 |
z |
毫秒,不补零,0-999 |
zzz |
毫秒,补零 3 位显示,000-999 |
AP或A |
使用 AM/pm 显示 |
ap或a |
使用 am/pm 显示 |
QDateEdit
QTimeEdit
QDateTimeEdit
QCalendarWidget(类似QDateEdit功能)
以QDateTimeEdit为例,常见的功能如下:
QTimer类似于硬件定时器,可以周期性间隔触发某个代码,也可以延迟调用某个代码。
构造函数:
是否是一次性的。
间隔时间,单位毫秒,如果是一次性的就是倒计时时间。
定时器是否运行中
下次触发剩余时间
槽函数:
启动定时器和停止定时器
注意,如果定时器正在运行,此时调用start函数会停止当前的定时器并重新开始。如果是一次性的定时器,只能启动一次。
信号函数:
定时器每次触发都发送此信号。
注意:所有信号槽的连接的前提是发射者和接收者对象均已创建完毕。
以一个数字时钟的例子来演示周期性定时器的使用。
QLCDNumber 用于模拟液晶屏幕显示数字(也能显示部分非数字字母和字符)。
数字时钟的位数