写在开头:
我们可以去这个网站进行学习C++的相关知识:https://github.com/0voice
目录
2、Qt 常见基本数据类型( 注意:定义在#include )
1、Qt字符串类应用
(1)操作字符串的方式
第一:QString提供一个二元的“+”操作符,主要用于组合两个字符串。
QString str1 = "Hello world";
这段代码传递给QString一个const char * 类型的ASCII字符串"Hello world",它被解释为一个典型的以"\0"结尾的C类型字符串
我们可以查看这个程序:
main.cpp
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 1:QString 提供二元“+”操作符应用,功能跟“+=”一样】
QString str1 = "Ling";
str1 = str1 + "Sheng EDU";
qDebug() << str1; // 打印信息,注意,这个打印会带上双引号,这个代码结果为 "Ling Sheng EDU"
qDebug() << qPrintable(str1); // 而这个不会带上双引号,这个代码结果为 Ling Sheng EDU
return a.exec();
}
第二:QString::append() 函数具备与 "+=" 操作符同样的功能,直接在一个字符串末尾添加另一个字符串。
示例程序如下:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 2.QString::append()函数
QString str2 = "Good";
QString str3 = "Bye";
str2.append(str3);
qDebug() << qPrintable(str2); // GoodBye
str2.append(" Hello world!");
qDebug() << qPrintable(str2); // GoodBye Hello world!
return a.exec();
}
第三:组合字符串:QString::sprintf()函数。其实它跟C++库中的sprintf函数是一样的,如果没有学过sprintf函数的话,可以看别人的这篇文章:字符串函数 sprintf() 详解-CSDN博客
示例代码如下:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//3. QString::sprintf()函数
QString strtemp;
strtemp.sprintf("%s", "Hello "); // 将strtemp的值赋值给hello
qDebug() << qPrintable(strtemp); // 输出结果为Hello
strtemp.sprintf("%s", "Hello world."); // 将strtemp赋值为hello world. 并将之前的赋值给覆盖掉
qDebug() << qPrintable(strtemp); // 输出结果为Hello world.
return a.exec();
}
第四:字符串组合方式QString::arg()函数,该函数的重载可以处理多种数据类型。因为它类型安全,同时支持Unicode,可以改变%n参数顺序
示例代码如下:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 4.QString::arg()函数,该函数的重载可以处理多种数据类型。
QString strTemp;
strTemp = QString("%1 was born in %2.").arg("xiaozeng").arg("2004"); // 将要加入的字符串通过%n来进行加入
qDebug() << qPrintable(strTemp); // xiaozeng was born in 2004
strTemp = QString("%2 was born in %1.").arg("2004").arg("lihua"); // 我们也可以调整参数的位置,从而达到不同的效果
qDebug() << qPrintable(strTemp); // lihua was born in 2004
return a.exec();
}
额外的知识:
我们还有其它组合字符串方法: insert()/prepend()/replace()等等:
1.insert()
-
在指定位置插入字符串,也可以是字符
// 1.insert方法
QString str = "Hello!";
str.insert(5, " world"); // 在索引为5的位置插入 world
qDebug() << qPrintable(str); // Hello world!
2.prepend()
-
在字符串前面添加字符串,也可以是字符
QString str = "world!";
str.prepend("Hello "); // 在字符串的前面添加"Hello "
qDebug() << str; // 输出:Hello world!
3.replace()
-
替换掉指定的字符串,也可以是字符和正则表达式
QString str = "Hello world!";
str.replace("world", "Qt"); // 将"world"替换为"Qt"
qDebug() << str; // 输出:Hello Qt!
(2)查询字符串的方式:
-
QString::startsWith()函数
注意:
Qt::CaseSensitive表示对大小写敏感
Qt::CaseInSensitive表示对大小写不敏感
#include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString strTemp = "How are you"; qDebug() << strTemp.startsWith("How", Qt::CaseSensitive); // Qt::CaseSensitive代表大小写敏感,结果为true qDebug() << strTemp.startsWith("HOW", Qt::CaseInsensitive); // Qt::CaseInSensitive代表大小写不敏感,结果是true qDebug() << strTemp.startsWith("HOw", Qt::CaseSensitive); // 由于大小写敏感,所以结果是false return a.exec(); }
2.QString::contains()函数
这个函数是用于判断输入的字符串是否在该字符串中出现过。
// QString::contains()函数
QString temp = "How old are you";
qDebug() << temp.contains("old", Qt::CaseSensitive); //true
qDebug() << temp.contains("are", Qt::CaseSensitive); //true
3.QString::toInt()函数
这个函数用于将字符串改变成int类型,toDouble()/toFloat()/toLong()也是同一个道理。
QString temp = "25";
bool isLoop;
int num = temp.toInt(&isLoop, 16); // 把"25"转换为16进制的整形数字,也就是2*16的一次方加上2*16的零次方 = 37
std::cout << "isLoop = " << isLoop << " num = " << num << std::endl;
int num1 = temp.toInt(&isLoop, 10); // 把"25"转换为10进制的整形数字,也就是25
std::cout << "isLoop = " << isLoop << " num1 = " << num1 << std::endl;
int num2 = temp.toInt(&isLoop, 2); // 把"25"转换为2进制的数字,但是由于二进制中没有5这个数字,所以转换无效,isLoop是false,num2是0
std::cout << "isLoop = " << isLoop << " num2 = " << num2 << std::endl;
4.QString::compare()函数
compare函数用于比较字符串的大小,不过其实是比较字符串首个字符的大小,这个函数一般用来判断两个字符串是否相同
int a1 = QString::compare("abcd", "ABCD", Qt::CaseInsensitive); // 由于对大小写不敏感,所以a的结果是0,0代表着这两个字符串结果是一样的
int b1 = QString::compare("abcd", "Cat", Qt::CaseSensitive); // 由于对大小写敏感,所以a的ASCII码大于C的,结果为正数30, 因为根据ASCII码, a-C = 30
int c1 = QString::compare("abcd", "Cat", Qt::CaseInsensitive); // 由于对大小写不敏感,所以a的ASCII码小于c的(因为这里把C看成了c),结果为负数 -2
std::cout << "a1 = " << a1 << std::endl; // 0
std::cout << "b1 = " << b1 << std::endl; // 30
std::cout << "c1 = " << c1 << std::endl; // -2
5.还可以将字符串转换成ASCII码
QString str = "ABC abc";
QByteArray bytes = str.toUtf8(); // 利用字节数组来存储数据, 并以 UTF-8 编码的格式表示。
for(int i = 0; i < str.size(); i++){
qDebug() << int(bytes.at(i)); // int(bytes.at(i)) 将该字节值转换为整数,以便输出到调试控制台。
}
结果如下:
65
66
67
32
97
98
99
2、Qt 常见基本数据类型( 注意:定义在#include <QtGlobal> )
额外的知识:
QString类型还可以访问当前日期和进行大小写的转换操作,示例代码如下:
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <iostream>
#include <QDateTime>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDateTime dt;
QString strDT = dt.currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); // 设置当前的时间格式,并转换为字符串
qDebug() << strDT << endl;
QByteArray a1("Qt Creator Hello World.");
QByteArray b1 = a1.toLower(); // 将字符大写转换为小写,小写不变
qDebug() << qPrintable(b1);
QByteArray c1 = a1.toUpper(); // 将字符串小写转换为大写,大写不变
qDebug() << qPrintable(c1);
return a.exec();
}
结果如下:
"2024-09-21 22:38:30"
qt creator hello world.
QT CREATOR HELLO WORLD.
总结:
(1)操作字符串的方式:
- "+"操作符
- QString::append()
- QString::sprintf()函数。
- QString::arg()函数
- 还有其它组合字符串方法: insert()/prepend()/replace()等等:
(2)查询字符串的方式:
- QString::startsWith()函数
- QString::contains()函数
- QString::toInt()函数
- QString::compare()函数