QT开发相关问题汇总-字符串相关(持续更新中)

前言

本页汇总了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


文章作者: YUV420.COM
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YUV420.COM !
评论
 上一篇
QT开发相关问题之打开文件对话框 QT开发相关问题之打开文件对话框
前言本页汇总了QT开发中遇到的相关问题,记录方便后期查阅。 Qt5 教程一个非常不错的QT教程https://www.bogotobogo.com/Qt/Qt5_TutorialHelloWorld.php 问题汇总打开文件获取路径获取文件
2020-01-07
下一篇 
回顾暴风影音的技术发展史 回顾暴风影音的技术发展史
前言暴风影音伴随一代人成长发展,最终寿终正寝。本文尝试从技术角度试着回顾一下暴风影音的技术发展史(待续)。
2020-01-07
  目录