Qt基础(一)QString 用法
QString 类保存 16位Unicode值,提供了丰富的操作、查询和转换等函数。
该类还进行了使用隐式共享、高效的内存分配策略等多方面的优化。
1. 字符串拼接
使用 + 运算符
// 字符串拼接
// + 运算符
static void StringConnect1()
{
QString str1 = "Welcome ";
str1 = str1 + "to you! ";
qDebug() << str1; // "Welcome to you! "
QString str2 = "Hello, ";
str2 += "world! ";
qDebug() << str2; // "Hello, world! "
}
QString::append() 函数
// 字符串拼接
// QString::append()
static void StringConnect2()
{
QString str1 = "Welcome ";
QString str2 = "to ";
str1.append(str2);
str1.append("you! ");
qDebug() << str1; // "Welcome to you! "
}
2. 格式化字符串
QString::asprintf() 函数
// 字符串组合
// QString::asprintf()
static void StringConnect3()
{
QString str;
// Qt 5.14 开始 sprintf 废弃,改用 asprintf 代替
str = QString::asprintf("%s", "Welcome "); // str = "Welcome "
str = QString::asprintf("%s", " to you! "); // str = "to you!
str = QString::asprintf("%s %s", "Welcome ", "to you! ");
qDebug() << str; // "Welcome to you! "
}
QString::arg() 函数
static void StringConnect4()
{
QString str;
// arg多个同类型的参数合并在一起
str = QString("%1 %2 %3").arg("Welcome", "to you!").arg(1998);
qDebug() << str; // "Welcome to you! 1998"
}
3. 其它字符串组合函数
static void StringConnect5()
{
QString str = "Welcome";
// 1. instert()函数:在原字符串特定的位置插入另一个字符串
str.insert(str.length(), " to you! ");
qDebug() << str; // "Welcome to you! "
// 2. prepend()函数:在原字符串的开头插入另一个字符串
str.prepend("Hello, ");
qDebug() << str; // "Hello, Welcome to you! "
// 3. replace()函数:用制定的字符串替代原字符串中的某些字符
str.replace("you", "the zoo");
qDebug() << str; // "Hello, Welcome to the zoo! "
}
4. 移除空白字符
// 移除空白字符
// 空白字符是指 \r \n \t 空格等
static void StringConnect6()
{
QString str = " Welcome to the zoo! \t \n";
// 1. trimmed()函数:移除字符串两端的空白字符,中间的不变
str = str.trimmed();
qDebug() << str; // "Welcome to the zoo!"
// 2. simplified()函数:移除字符串两端的空白字符,并用带个 " " 代替字符串中出现的空白字符
str = " Welcome to\t\rthe zoo! \t \n";
str = str.simplified();
qDebug() << str; // "Welcome to the zoo!"
}
5. 查询字符串数据
static void StringFind()
{
QString str = "Welcome to the zoo!";
// 1. startsWith() 以指定字符串开头
qDebug() << str.startsWith("Welcome");
// 忽略大小写
qDebug() << str.startsWith("welcome", Qt::CaseInsensitive);
// 2. endsWith() 以指定字符串结尾
qDebug() << str.endsWith("zoo!");
qDebug() << str.endsWith("ZOO!", Qt::CaseInsensitive);
// 3. 是否包含某个字符串
qDebug() << str.contains("to");
// 4. 比较字符串是否相等,可以忽略大小写,相等则返回0
// 还可用 < <= > >= == 等运算符
qDebug() << str.compare("Welcome to the zoo!");
}
6. 字符串转换
和数字类型转换
// 字符串转换
static void StringCastNumber()
{
QString str = "123";
bool ok;
// 转换为数字类型,还有toDouble、toLong等
// 第一个参数返回是否转换成功,第二个参数指定转换基数
int hex = str.toInt(&ok, 16); // 转为十六进制 hex=291
int dec = str.toInt(&ok, 10); // 转为10进制 dec=123
qDebug() << "hex: " << hex;
qDebug() << "dec: " << dec;
}
字符编码转换
static void StringCastCodec()
{
// 字符编码转换
QString str1 = "hello, 你好";
qDebug() << "utf-8 str: " << str1;
// 返回一个ASCII编码的8位字符串
QByteArray ba = str1.toLatin1();
qDebug() << "ascii byte array: " << ba;
// 返回一个UTF-8编码的8位字符串
ba = str1.toUtf8();
qDebug() << "utf-8 byte array: " << ba;
// utf-8 编码器
QTextCodec *utf8_codec = QTextCodec::codecForName("utf-8");
// gbk 编码器
QTextCodec *gbk_codec = QTextCodec::codecForName("gbk");
// utf-8 to unicode
QString string = utf8_codec->toUnicode(ba);
qDebug() << "utf-8 to unicode: " << string;
// 返回一个系统本地编码的8位字符串(Windows上为gbk)
ba = str1.toLocal8Bit();
qDebug() << "gbk byte array: " << ba;
// gbk to unicode
string = gbk_codec->toUnicode(ba);
qDebug() << "gbk to unicode: " << string;
// unicode to utf-8
QByteArray encodedString = utf8_codec->fromUnicode(string);
qDebug() << "unicode to utf-8: " << QString(encodedString);
}
7. 字符串判空
// NULL字符串和空(empty)字符串的区别
// 一个NULL字符串一定是空字符串,反之则未必成立
static void StringIsEmpty()
{
QString str = "empty str";
// NUL字符串:QString默认构造函数或使用 (const char*)0 作为参数创建的 QString 对象
QString().isNull(); // true
QString().isEmpty(); // true
// 空字符串:大小为0的字符串
QString("").isNull(); // false
QString("").isEmpty(); // true
}
8. 其它
在 main.cpp 头文件输入
#pragma execution_character_set("utf-8")