目录
·truncate(int)函数,从指定位置截断字符串str
方式二、解决整个工程代码中文乱码,在main函数里面加上这几句
一、QString转char*
方式一:
-
QString sData;
-
char *buffer = sData.
toStdString().
c_str();
方式二:QString先转成QByteArry,再由QByteArry转char*
-
QString str;
-
//方式1
-
str.
toUtf8().
data();
//编码为UTF8编码
-
str.
toLatin1().
data();
//编码为Latin-1
-
5/
10补充:以上最好分成两步进行,不然有时候会报错
-
QByteArray arry=str.
toUtf8();
-
char *ch=arry.
data();
-
-
//方式2
-
QByteArray ba2;
-
ba2.
append(str);
-
char *buffer = ba2.
data();
补充:
char*转QString的方法:
-
const
char *c1 =
"Hello World 1!";
-
QString s1(c1);
-
qDebug() << c1 << s1;
二、合并字符串
-
QString str1 =
"Welcome";
-
QString str2 =
" Hello,";
-
-
//方式1 直接相加 +
-
str1 = str1 +
" to you";
//str1="Welcome to you"
-
str2.
sprintf(
"%s %s",
"Welcome ",
" to you! ");
//str2 = "Welcome to you!"
-
-
//方式2 加到末尾 append
-
str1 +=
" World! ";
//str2="Welcome to you World!"
-
str2.
append(
"fff");
//效果同上
-
-
//方式3 自由组合 arg
-
QString str;
-
str =
QString(
"%1 was %2.").
arg(
"he").
arg(
"boy");
//str = "he was boy";
三、分割字符串
·split()函数
-
QString str =
"a,,b,c";
-
QStringList list1 = str.
split(
",");
-
// list1: [ "a", "", "b", "c" ]
-
QStringList list2 = str.
split(
",", QString::SkipEmptyParts);
-
// list2: [ "a", "b", "c" ]
·mid(pos,n)函数
返回在给定位置(第一个参数)开始且达到给定长度(第二个参数)的字串
-
QString x =
"Nine pineapples";
-
QString y = x.
mid(
5,
4);
// y == "pine"
-
QString z = x.
mid(
5);
// z == "pineapples"
·QString::section
这个函数把字符串看成是几个块,这些块由 sep 分隔,start 和 end 指定块号,end 默认为 –1 ,返回的是[ start, end ]内的块组成的字符串,如果 start 和 end 都是负数,那么将从字符串的后面往前面数,返回 [ -end, –start ]内的块组成的字符串。SectionFlags是一些标记,如SectionSkipEmpty表示如果两个分隔符之间是空串,那么就会跳过。
-
QString QString::section ( QChar sep,
-
int start,
-
int end = -1,
-
SectionFlags flags = SectionDefault )
const
实例:
-
QString str;
-
QString csv =
"forename,middlename,surname,phone";
-
QString path =
"/usr/local/bin/myapp";
// First field is empty
-
QString::SectionFlag flag = QString::SectionSkipEmpty;
-
-
str = csv.
section(
',',
2,
2);
// str == "surname"
-
str = path.
section(
'/',
3,
4);
// str == "bin/myapp"
-
str = path.
section(
'/',
3,
3, flag);
// str == "myapp"
·truncate(int)函数,从指定位置截断字符串str
-
QString str =
"Vladivostok";
-
str.
truncate(
4);
-
// str == "Vlad"
四、去除字符串两端的空白
空白字符包括回车符号“\n”、换行符“\r”、制表符"\t"和空格字符:“ ”等
·QString::trimmed()函数
移除字符串两端的空白符
·QString::simplified()函数
移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符
-
QString str =
" lots\t of\nwhitespace\r\n ";
-
str = str.
trimmed();
-
//str == "lots\t of\nwhitespace" 注:qDebug()<<str并没有展现出效果
-
str = str.
simplified();
-
// str == "lots of whitespace";注:qDebug()<<str可以看出效果
五、查找是否包含字符串
·indexOf()
如果想查明一个字符串是否包含一个特定的字符、子串、或正则表达式,可以使用QString中的indexOf()函数,函数原型如下
-
int QString::indexOf (
-
const QString & str,
-
int from = 0,
-
Qt::CaseSensitivity cs = Qt::CaseSensitive )
const
实例:第一个出参数是要查找的内容,第二个参数是查找的起始位置,从0开始数
-
QString x =
"sticky question";
-
QString y =
"sti";
-
x.
indexOf(y);
// returns 0
-
x.
indexOf(y,
1);
// returns 10
-
x.
indexOf(y,
10);
// returns 10
-
x.
indexOf(y,
11);
// returns -1
·startWith()/endsWith()函数
检查字符串是否以某个字符(串)开始或结束
-
QString str =
"Bananas";
-
str.
startsWith(
"Ban");
// returns true
-
str.
startsWith(
"Car");
// returns false
·left(n)/right(n)函数
返回字符串的前n个字符串或者最后n个字符,例:str.left(n);
六、常见问题
·如何在字符串换行排列里面加双引号?
·
·Linux下qDebug()解决输出中文乱码的问题
一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码;出现乱码的原因要考虑原代码是何种编码格式
方式一、解决单个乱码问题
QString::fromLocal8Bit("我司");
方式二、解决整个工程代码中文乱码,在main函数里面加上这几句
-
//定义utf-8编码格式
-
QTextCodec *codec = QTextCodec::
codecForName(
"utf-8");
-
-
//这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。
-
//比如通过流读取一个文件内容时的编码格式或者通过qDebug输出打印信息时的编码
-
QTextCodec::
setCodecForLocale(codec);
-
-
//用在字符常量或者QByteArray构造QString对象时使用的一种编码方式
-
QTextCodec::
setCodecForCStrings(codec);
-
-
//这个函数的作用是设置传给tr函数时的默认字符串编码
-
QTextCodec::
setCodecForTr(codec);
其他
·数字转换为字符串
-
//方式1
-
QString str = QString ::
number(
59.6);
-
//方式2
-
str.
setNum(
1234);
// str == "1234"
·chop(int n)函数,从字符串末尾删除n个字符
如果n大于SIZE(),则结果为空字符串
-
QString str("LOGOUT\r\n");
-
str.
chop(
2);
-
// str == "LOGOUT"
·remove(i,n)删除字符串中的
表示从第几个位置(从0开始数)开始,删除n个字符(从1开始数)
-
QString s =
"Montreal";
-
s.
remove(
1,
4);
-
// s == "Meal"
</article>