首页 > 其他分享 >Qt基础(一)QString 用法

Qt基础(一)QString 用法

时间:2024-05-26 20:15:23浏览次数:22  
标签:Qt void 用法 qDebug static QString str 字符串

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"
}

Use multi-arg instead报错解决方法

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
}

标签:Qt,void,用法,qDebug,static,QString,str,字符串
From: https://www.cnblogs.com/jixiaohua/p/18214201

相关文章

  • Windows、Linux下,基于QT的打包方法
    整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考ps:第一次做Windows下打包,用了2小时,第二次20秒第一次做Linux(ubuntu)下打包,用了8小时,第二次1分半一、Windows有许多比较坑的帖子,会带新人走不少弯路,大家注意鉴别(没方法,随缘)1、首先,找到......
  • vector容器的用法
    vector容器的用法文章目录vector容器的用法1.vector是向量的意思,他是动态顺序表2.封装数组3.capacity和size的用法4.assign的用法5.resize的用法6.front和back的用法7.clear和erase用法8.vector中逆序输出的用法9.insert的用法1.vector是向量的意思,他是动态顺序表2......
  • stream( ).collect ( Collectors.groupingBy ( ) ) 的用法
    文章目录第一种解释1、基本用法2、指定值收集器3、多级分组4、常见应用场景和用处第二种解释1、基本语法2、示例3、更复杂的用法第一种解释Collectors.groupingBy是Java8引入的StreamAPI中的一个收集器(Collector),它用于将流(Stream)中的元素根据某个分类函数......
  • [AIGC] 你能简要解释一下CompletableFuture中thenCompose()方法的用法吗?
    thenCompose()是CompletableFuture的一个方法,用于链接两个CompletableFuture对象。这可以用来促成函数式风格的编程,而无需再额外处理Future对象的嵌套。thenCompose()方法接受一个函数作为参数,这个函数的输入是先前CompletableFuture的结果,它返回的是一个新的Co......
  • Kubernetes Service 之原理与 ClusterIP 和 NodePort 用法
    KubernetesService之原理与ClusterIP和NodePort用法Service定义在Kubernetes中,由于Pod是有生命周期的,如果Pod重启它的IP可能会发生变化以及升级的时候会重建Pod,我们需要Service服务去动态的关联这些Pod的IP和端口,从而使我们前端用户访问不受后端变更......
  • Qt支持heic图片显示
    目录一、背景二、Heic图片显示heif库安装图片显示三、参考文章原文链接:Qt支持heic图片显示一、背景小孩子两岁了,最近在着手给娃做生活照纪念相册,然后就是某宝上各种聊,了解到的相册种类也是各异,价格更是良莠不齐,小几十到小几百都有,一时间还是难以下手。刚过完年那一阵偶然一次看......
  • 【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?
    常见问题Q:Heygen是什么?Heygen是什么玩意?A:Heygen是一款由AI视频工具,创作者只需要上传视频并选择要翻译的语言,该工具可实现自动翻译、调整音色、匹配嘴型。为了方便理解,笔者利用Heygen制作了一个AI视频,源图是下面这张AI作品,点此查看示例,访问可能需要魔法Q:Heygen好用......
  • Qt - Qt6中QTextStream类的setCodec方法没有了,怎么解决写中文文本乱码
    简介场景:程序在linux下运行,将中英文写入文本,将文本在windows上打开时,中文出现乱码 原Qt5中:QFilefile;file.open(QIODevice::WriteOnly|QIODevice::Text);QTextStreamtextStream(&file);textStream.setCodec("GBK");使用 QTextStream类的 setCodec方法即可解决上......
  • qt一个线程管理的tcp
    写一个在x线程中管理的tcp#include<QThread>#include<QTcpSocket>#include<QObject>#include<QNetworkProxy>classTcpSocketController:publicQTcpSocket{Q_OBJECTpublic:TcpSocketController(QObject*parent=nullptr):QTcpSoc......
  • qt一个在线程管理的串口
    qt一个在线程管理的串口 #include<QObject>#include<QSerialPort>#include<QSerialPortInfo>#include<QDebug>#include<QFile>#include<QTextStream>#include<QThread>#include<QTimer>#include<QEventLoop>......