前言
本页汇总了QT开发中遇到的相关问题,记录方便后期查阅。
问题汇总
字符串相关
QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如
QString m = tr("%1:%2:%3").arg("12").arg("60").arg("60"); // m = "12:60:60:
QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const
这个方法用于填充字符串中的%1,%2…为给定格式的整形数字,其中第一个参数是要填充的数字,第二个参数为最小宽度,第二个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符。
QString text = QString("%1:%2")
.arg(123, 5, 10, QChar('0'))
.arg(456, 5, 10, QChar('0')); // text = "00123:00456"
- 将一个字符串追加到另一个字符串的末尾
QString str1 = “hello “;
QString str2 = “world”;
str1.append(str2); // str1 = “hello world”
str1.append(“ !”); // str1 = “hello world !”
// 对字符串直接 + 另一个字符串也可以实现,但是不对原本的字符串进行操作
QString str3 = str1 + str2 + “ !”; // str3 = “hello world !” str1 = “hello “
从字符串中查找某个字符串
QString x = “sticky question”;
QString y = “sti”;
x.indexOf(y); // 返回0
// 函数indexOf()会返回要查找的字符串在字符串中第一次出现的位置
// 如果没有要查找的字符串,返回-1用某个字符填满字符串
QString str = “Hello”;
str.fill(‘x’); // str == “xxxxx”
str.fill(‘A’, 2); // str == “AA”
判断字符串是否为空
QString().isEmpty();// 返回 true
QString(“”).isEmpty(); // 返回 true
QString(“ “).isEmpty(); // 返回 false
QString(“abc”).isEmpty(); // 返回 false判断字符串是否存在
QString().isNull(); // 返回 true
QString(“”).isNull(); // 返回 false
QString(“abc”).isNull();// 返回 false
从左向右截取字符串
QString str = “Hello World !”;
QString str1 = str.left(5); // str1 = “Hello”
从中间截取字符串
QString str = “I love C++!”;
QString str1 = str.mid(2, 4); // str1 == “love”
QString str2 = str.mid(2); // str2 == “love C++!”
截取字符串中最右边几个字符
QString str = “I love C++!”;
QString str1 = str.right(4);// str = I love C++! str1 = “C++!”删除字符串中的最后几个字符
QString str = “Hello World !”;
str.chop(8); // str = “Hello”删除字符串中间某个字符
QString str = “Hello World!”;
str.remove(5, 6); // str = “Hello!”指定位置插入字符串
QString str = “Hello!”;
str.insert(5, QString(“ World”)); // str = “Hello World!”用几个字符替换字符串中的几个字符
QString x = “Say yes!”;
QString y = “no”;
x.replace(4, 3, y); // x = “Say no!”
x.replace(“yes”, “no”); // x = “Say no!”字符串补零到指定位
QString str = “A6”;
//如果要把str补全到8位,空位用0补全
QString str1 = QString(“%1”).arg(str, 8, QLatin1Char(‘0’)); //str1 = “000000A6”
//arg里第一个参数是要补全的字符串,第二个参数是要补全到的位数,第三个参数是用什么字符补全,可以不是0的其他字符整型十进制转为十六进制字符串并补零到指定位
int n = 66;
//如果要把n转换为十六进制并补全到8位
QString str = QString(“%1”).arg(n, 8, 16, QLatin1Char(‘0’)); // str = “00000042”
//arg里第一个参数是十进制整型的数,第二个参数是要补全到的位数,第三个参数是要转换的进制,可以是十六进制也可以是十进制
//第四个参数是用什么字符补全,可以不是0的其他字符以某个字符切割字符串
QString csv = “forename,middlename,surname,phone”;
QString path = “/usr/local/bin/myapp”;//section()会把字符串以第一个参数的符号切割分成数个字符串,后面两个参数是得到的字符串的开始和结束的位置
QString str;
str = csv.section(‘,’, 2, 2); // str = “surname”
str = path.section(‘/‘, 3, 3); // str = “bin”
str = path.section(‘/‘, 3, 4); // str = “bin/myapp”
str = path.section(‘/‘, 3, 3, QString::SectionSkipEmpty); // str = “myapp”
以某个字符切割字符串另一种方法
QString str = “a,,b,c”;
QStringList list1 = str.split(‘,’);
// list1: [ “a”, “”, “b”, “c” ]QStringList list2 = str.split(‘,’, QString::SkipEmptyParts);
// list2: [ “a”, “b”, “c” ]检查字符串是否以某个字符串开头或结尾
QString str = “http://www.baidu.com";
str.startsWith(“http:”); // 返回true
str.endsWith(“cn”); // 返回false
//这个方法比left()和right()要简单快速,通常用来检查路径或者网址比较两个字符串是否相等
QString str1 = “xxx”;
QString str2 = “XXX”;//localeAwareCompare()会比较两个参数的大小,如果str1小于str2,返回小于0的数,等于返回0,大于返回大于0的数
QString::localeAwareCompare(str1, str2) // 返回 -1//localeAwareCompare()的比较区分大小写,想要不区分大小写,可以使用toLower()或toUpper()使字符串全变成小写或大写
if(QString::localeAwareCompare(str1.toUpper(), str2) == 0)
{qDebug() << "str1和str2相等"; // 返回0,输出:str1和str2相等
}
QString、string和C字符串相互转换
std::string转换成QString
string std_str (“abc”);
QString q_str = QString::fromStdString(std_str);
QString转换成std::string
QString q_str(“abc”);
string = q_str.toStdString();
string转换成char*
string std_str(“abc”);
char *str = std_str.c_str(std_str);
char* 转换成string
char c_str = "abcdefghijklmn"; string str = c_str;
QString转换成char*
QString q_str; char* ch; QByteArray ba = q_str.toLatin1(); ch=ba.data(); 当然,也可以通过std::string为桥梁
char* 转QString
可以通过std::string为桥梁 Qt中QString有如下构造函数 QString(const char * str) ,因此,可以直接将char*作为参数传入
路径相关
Qt快速转换路径(斜杠与反斜杠转换)
/转\(斜杠转反斜杠)
使用QDir::toNativeSeparators接口
QString path = “C:/temp/test.txt”;
path = QDir::toNativeSeparators(path);输出
“C:\temp\test.txt”
\转/(反斜杠转斜杠)
使用QDir::fromNativeSeparators
QString path = “C:\temp\test.txt”;
path = QDir::toNativeSeparators(path);输出
C:/temp/test.txt
参考资料
https://blog.csdn.net/sakuya__/article/details/87866030
https://blog.csdn.net/chienchia/article/details/30750257