QString(详解)

article/2025/9/12 7:44:41

目录

一、QString转char*

二、合并字符串

三、分割字符串

·split()函数

·mid(pos,n)函数

·QString::section

·truncate(int)函数,从指定位置截断字符串str

四、去除字符串两端的空白

·QString::trimmed()函数

·QString::simplified()函数

五、查找是否包含字符串

·indexOf()

·startWith()/endsWith()函数

·left(n)/right(n)函数

六、常见问题

·如何在字符串换行排列里面加双引号?

·Linux下qDebug()解决输出中文乱码的问题

方式一、解决单个乱码问题

 方式二、解决整个工程代码中文乱码,在main函数里面加上这几句

其他

 ·数字转换为字符串

·chop(int n)函数,从字符串末尾删除n个字符

·remove(i,n)删除字符串中的


一、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-15/10补充:以上最好分成两步进行,不然有时候会报错,示例:QByteArray arry=str.toLocal8Bit();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 加到末尾 appendstr1 += " 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 emptyQString::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 0x.indexOf(y, 1);            // returns 10x.indexOf(y, 10);           // returns 10x.indexOf(y, 11);           // returns -1

·startWith()/endsWith()函数

检查字符串是否以某个字符(串)开始或结束

    QString str = "Bananas";str.startsWith("Ban");     // returns truestr.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);

其他

 ·数字转换为字符串

    //方式1QString str = QString ::number(59.6);//方式2str.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"


http://chatgpt.dhexx.cn/article/1OLWoPhi.shtml

相关文章

Java——JLabel自动换行问题

┏(ω)☞ 本专栏的目录&#xff08;为您提供更好的查询方式&#xff09;&#xff08;点这里说不定有你想要的&#xff09; JLabel类可显示文本&#xff0c;一般直接添加文字会导致如下问题&#xff08;字体显示不全&#xff09;&#xff0c;在不同过增加文本框的长度的情况下可…

JLabel展示文本和图片

JLabel 构造方法 JLabel&#xff08;&#xff09;创建一个不含图像&#xff0c;不含文本的 JLabel 对象 JLabel&#xff08;String text&#xff09;使用指定的文本创建一个 JLabel 对象 JLabel&#xff08;Icon image&#xff09;创建一个具有指定图像的 JLabel 对象 pack…

java设置JLabel字体字号颜色

JLabel jl; Font f new Font("宋体",Font.PLAIN,16); jl.setFont(f); jl.setForeground(Color.red); 效果图&#xff1a;

JLabel设置背景颜色和设置文字颜色

JLabel设置背景颜色&#xff1a; JLabel light1 new JLabel("wuli"); light1.setOpaque(true); //此句是重点&#xff0c;设置背景颜色必须先将它设置为不透明的&#xff0c;因为默认是透明的。。。 light1.setBackground(Color.GREEN); JLabel设置文字颜色&…

【Java|Swing】关于JLabel换行

最近在用Swing做Windows的窗口程序&#xff0c;在使用JLabel时发现使用\n没办法换行&#xff0c;于是乎借助百度一下弄懂了JLabel是如何实现换行的。 先可以看一下使用\n的效果 JLabel labelnew JLabel("数据版本\nv1.0.0"); 运行测试 很明显&#xff0c;换行失败了…

初识JFrame、JPanel、JLabel

JFrame&#xff1a;java图形化界面设计&#xff0c;是一个顶层的框架类&#xff0c;相当于容器。好比一个窗户的框子&#xff0c;这个框子可以嵌入几个玻璃窗。 JPanel&#xff1a;也是一个容器类&#xff0c;相当于一个大玻璃窗。 JLabel&#xff1a;是一些基础组件&#xff0…

JFrame,JPanel,JLabel详解

JFrame是一个顶层的框架类&#xff0c;好比一个窗户的框子。也是一个容器类。这个框子可以嵌入几个玻璃窗。 JPanel是一个容器类&#xff0c;相当于一大玻璃窗。 JLabel等是一些基础组件&#xff0c;它必须置于某个容器里&#xff0c;类似于窗花、剪纸&#xff0c;必须置于窗户…

Java图形界面之JFrame,JLabel,JButton

Java图形界面之JFrame&#xff0c;JLabel&#xff0c;JButton 前言 ​ Java第一卷​ 图形界面第一节 JFrame package Demo03;import javax.swing.*; import java.awt.*;public class JFrame01 {public static void main(String[] args) {JFrame f new JFrame("第一个Swi…

Java GUI编程4---标签组件JLabel

1. 认识JLabel JLabel组件表示的是一个标签&#xff0c;本身是用于显示信息的&#xff0c;一般情况下是不能直接更改器显示内容的。创建完的Label对象可以通过Container类中的add()方法&#xff0c;加入到容器中&#xff0c;JLabel类的常用方法和常量如下表所示。 序号常量描…

JLabel标签较为常见部分的使用方法

本篇文章将会教会大家如何使用JLabel 1添加JLabel //创建一个标签 JLabel jLabel new JLabel("Hi,我是标签"); //添加到面板 Jpanel1.add(jLabel); //将面板添加到窗口 jFrame.add(Jpanel1);2设置文本颜色 //设置文本颜色 jLabel.setForeground(Color.green);3设…

Java基础-JLable组件、文本框组件、JPanel轻量级容器、Swing事件处理三种方式、适配器

1、JLable标签组件 标签是一种可以包含文本和图片的非交互组件&#xff0c;其文本可以是单行文本&#xff0c;也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类&#xff0c;该类的主要构造方法有如下几种形式。 JLabel()&#xff1a;创建无图像并且标题为空字符串…

06.JavaSwing(基础组件——JLabel类)

软件界面是软件和用户之间的交流平台&#xff0c;而组件则是绘制软件界面的基本元素&#xff0c;是软件和用户之间的交流要素。 一、概述 JLabel组件用来显示文本和图像&#xff0c;可以只显示其一种&#xff0c;也可以同时显示。JLabel类提供了一些列用来设置标签的方法。 二…

从DTW到DILATE---时序预测损失函数总结

时间序列预测损失函数 时间序列预测是指通过分析历史数据来预测未来数据的变化趋势。时间序列预测在许多领域都有着广泛的应用&#xff0c;例如金融、气象、交通等。为了能够准确预测未来数据&#xff0c;时间序列预测中损失函数的选择非常关键。损失函数的选择直接影响模型的…

DTW算法——matlab实现(二)

DTW算法——Matlab实现 本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献&#xff1a; 离散序列的一致性度量方法&#xff1a;动态时间规整&#xff08;DTW&#xff09; http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲…

【时间序列】DTW算法详解

作者 | 追光者 研究 | 机器学习与时间序列 出品 | AI蜗牛车 1.DTW 1.1 时序相似度 在时间序列数据中&#xff0c;一个常见的任务是比较两个序列的相似度&#xff0c;作为分类或聚类任务的基础。那么&#xff0c;时间序列的相似度应该如何计算呢&#xff1f; “ 经典的时间序列相…

学习dtw-python库内容 动态弯曲距离(DTW)具体实现

文章目录 一、install 数据包二、函数功能三、函数的参数以及含义四、具体实现 一、install 数据包 简单的pip install一下就好了&#xff0c;注意最后提示Successfully installed dtw-python-1.3.0 pip install dtw-python二、函数功能 执行 DTW 算法&#xff0c;并计算两个…

DTW距离

DTW&#xff08;dynamic-time-wraping&#xff09; 当两个时间序列等长时&#xff0c;我们可以使用欧氏距离来度量两者的相似性。但是当两个时间序列不等长时&#xff0c;欧氏距离就难以度量两者的相似性了。因此&#xff0c;国外学者提出了动态时间弯曲距离(Dynamic time war…

【时间序列】动态时间规整(DTW)算法简介(python)

简介 动态时间规整&#xff1a;(Dynamic Time Warping&#xff0c;DTW) 定义&#xff1a;用于比较不同长度的两个数组或时间序列之间的相似性或计算两者间的距离。 例1&#xff1a;a [1,2,3],b[3,2,2] 例2&#xff1a;a[1,2,3],b[2,2,2,3,4] 例1好计算&#xff0c;但对于例2&am…

【积】fast-DTW及其代码详解

fast-DTW 在解说中适合一个单特征的时间序列&#xff0c;在附录中修改了距离函数从而适合多个特征的时间序列。且距离函数用的是L1距离。如果是其他距离函数&#xff0c;修改即可。 1. DTW常用的加速手段 1.1 限制 亦即减少D的搜索空间&#xff0c;下图中阴影部分为实际的探…

DTW算法(语音识别)

DTW主要是应用在孤立词识别的算法&#xff0c;用来识别一些特定的指令比较好用&#xff0c;这个算法是基于DP&#xff08;动态规划&#xff09;的算法基础上发展而来的。这里介绍语音识别就先介绍下语音识别的框架&#xff0c;首先我们要有一个比对的模版声音&#xff0c;然后需…