> 文档中心 > QString 详解及解决Linux下输出乱码的问题

QString 详解及解决Linux下输出乱码的问题

1----------合并

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 加到末尾    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";

2----------分割
a.split

QString str = "a,,b,c";    QStringList list1 = str.split(",");    // list1: [ "a", "", "b", "c" ]    QStringList list2 = str.split(",", QString::SkipEmptyParts);    // list2: [ "a", "b", "c" ]

b.mid()函数返回在给定位置(第一个参数)开始且达到给定长度(第二个参数)的字串

QString x = "Nine pineapples";QString y = x.mid(5, 4);     // y == "pine"QString z = x.mid(5); // z == "pineapples"

c.QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const
这个函数把字符串看成是几个块,这些块由 sep 分隔,start 和 end 指定块号,end 默认为 –1 ,返回的是[ start, end ]内的块组成的字符串,如果 start 和 end 都是负数,那么将从字符串的后面往前面数返回 [ -end, –start ]内的块组成的字符串。SectionFlags是一些标记,如SectionSkipEmpty表示如果两个分隔符之间是空串,那么就会跳过。

 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"

d.从指定位置截断字符串str

 QString str = "Vladivostok"; str.truncate(4); // str == "Vlad"

3----------去除字符串两端的空白(空白字符包括回车符号“\n”、换行符“\r”、制表符"\t"和空格字符:“ ”等
a.QString::trimmed()函数:移除字符串两端的空白符
b. 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可以看出效果

4--------查找
a.返回下标

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

b.left(n)/right(n)函数返回字符串的前n个字符串或者最后n个字符;str.left(n);
c.startWith()/endsWith()函数,检查字符串是否以某个字符(串)开始或结束;

 QString str = "Bananas"; str.startsWith("Ban");     // returns true str.startsWith("Car");     // returns false

5----------QString转char*的方法
a.char*转QString

    const char *c1 = "Hello World 1!";    QString s1(c1);    qDebug() << c1 << s1;

b.通过中间介质QByteArray

QString str;    //方式1 假如为UTF8编码    str.toUtf8().data();    str.toLatin1().data();//编码为Latin-1    //方式2        QByteArray ba2;     ba2.append(str);     char *buffer = NULL;     buffer = ba2.data();

常见问题:
a.如何在字符串里面加双引号?
QString 详解及解决Linux下输出乱码的问题
b.数字转换为字符串

//方式1    QString str = QString ::number(59.6);    //方式2    str.setNum(1234);// str == "1234"

c.Linux下qDebug()解决输出中文乱码的问题
一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码;
出现乱码的原因要考虑原代码是何种编码格式
1

QString::fromLocal8Bit("我司");

2 放在代码前面

//定义utf-8编码格式QTextCodec *codec = QTextCodec::codecForName("utf-8");//这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。//比如通过流读取一个文件内容时的编码格式或者通过qDebug输出打印信息时的编码    QTextCodec::setCodecForLocale(codec); //用在字符常量或者QByteArray构造QString对象时使用的一种编码方式    QTextCodec::setCodecForCStrings(codec); //这个函数的作用是设置传给tr函数时的默认字符串编码    QTextCodec::setCodecForTr(codec);