Qt QString详解

一、字符集的概念

1. 多字节字符集

0 到 127之间的字符,依旧是一个字节代表一个字符,超出部分 2 个字节来表示一个字符

2. UTF-8

变长的编码方式,单字节与ASCII相同,对于n字节的符号(n > 1),首字节前n位为1,n+1为0,后面字节前两位都是10

3. UTF-16(两字节或是四字节)

4. UTF-32(四字节)

二、字节序(BOM)的概念

  • 小端字节序(LE):低位在前(0x001A23 23 1A 00)
  • 大端字节序(BE):高位在前(0x001A23 00 1A 23)
  • BOM字节序标志头(文本头FE FF是BE)

三、QString常用功能

  • isNull():判断是否为空对象。
  • isEmpty():判断是否为空串,也可以用(str == “”)。
  • append():字符串追加(拼接),也可以用 + 进行拼接。
  • .arg():格式化输出字符串。https://www.cnblogs.com/lvdongjie/p/3758031.html
  • QString::number(12):将整型、字符型转换成字符串,也可以自行设置精度。
  • toInt(),toFloat(),toDouble():将字符串转换成整型,单精度浮点型,双精度浮点型。

1. QString遍历

  • 通过迭代器遍历
for(QString::iterator itr = itstr.begin();itr != itstr.end();itr++)
  • 通过for循环遍历下标访问
for(int i = 0; i < itstr.size(); itr++)

2. QString查找

原始字符串.indexOf(要查找的字符串,查找的起始位置),如果查找到了就返回当前查找字符串起始位置的索引,如果找不到就返回-1。

3. QString截取

  • 1、bool QString::startsWith() :字符串以XX开头,返回true,第二个参数可以设置大小写敏感
QString str = "Bananas";
str.startsWith("Ban");     // returns true
str.startsWith("Car");     // returns false
  • 2、bool QString::endsWith() : 字符串以XX结尾,返回false,第二个参数可以设置大小写敏感
QString str = "Bananas";
str.endsWith("anas");         // returns true
str.endsWith("pple");         // returns false
  • 3、QString QString::trimmed(): 返回前后没有空格的字符串
QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
  • 4、QString &QString::remove(int position, int n) :指定位置开始删除n个字符,返回该字符引用
QString s = "Montreal";
s.remove(1, 4);
// s == "Meal"
  • 5、int QString::indexOf():返回从指定位置开始第一次出现的索引位置,未找到返回-1。第二个参数可以设置大小写敏感
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
  • 6、int QString::lastIndexOf() :返回此字符串中字符串str的最后一次出现的索引位置,从索引位置向后搜索。如果from是-1(默认值),搜索从最后一个字符开始;如果from是-2,则在倒数第二个字符处,依此类推。如果没有找到str,则返回-1。第二个参数可以设置大小写敏感
QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y);           // returns 6
x.lastIndexOf(y, 6);        // returns 6
x.lastIndexOf(y, 5);        // returns 2
x.lastIndexOf(y, 1);        // returns -1
  • 7、QString QString::right(int n) const : 返回包含该字符串的最右n个字符的子字符串。
QString x = "Pineapple";
QString y = x.right(5);      // y == "apple"
  • 8、QString QString::left(int n) const : 返回包含该字符串的最左n个字符的子字符串。
QString x = "Pineapple";
QString y = x.left(4);      // y == "Pine"
  • 9、QString QString::mid(int position, int n = -1) const : 返回一个包含该字符串的n个字符的字符串,从指定的位置索引开始。
QString x = "Nine pineapples";
QString y = x.mid(5, 4);            // y == "pine"
QString z = x.mid(5);               // z == "pineapples"
  • 10、chop(int n):改变的是原有字符串
QString s = "abcd";
s.chop(2);
qDebug() << s << endl;		//ab

4. QString替换

  • replace():字符串替换
QString str("abcdef");
str.replace("a","abcdf");	//abcdefbcdef

5. QString分割

  • split():按照指定的字符分割
QString str("ab,cd,ef,g,h");
QStringList list = str.split(",");
qDebug() << list;

四、QString正则表达式

正则表达式匹配关键字规则说明
. 匹配任意字符
+表示重复匹配 1到多个
*表示匹配0 到多个

1. QRegExp正则表达式

规则关键字说明和实例
^ 表示匹配字符串的开始位置
$ 表示字符串的结束位置
?前一个匹配是可选的,也就是可有可无

QString str = "abcdefg123hijk[num]lmn 456 958";
int pos = str.indexOf(QRegExp("[0-9]+"));
cout << pos << endl;    // 7

QString str2 = str;
str2.replace(QRegExp("[0-9]+"),"[num]");
qDebug() << str2 << endl;   //"abcdefg[num]hijk[num]lmn [num] [num]"

QStringList stringList = str.split(QRegExp("[0-9]+"));
for(int i = 0;i < stringList.size();i++)
{
   qDebug() <<stringList[i] << endl;
}

五、QT中文乱码问题

1. QT字符集设置解决中文乱码的问题

Qt Creator中默认是utf-8编码,可直接对中文进行输出。
在vs中默认编码是GB2312,需要对中文进行字符集设置,通过一个预处理宏进行设置,或是进行转换,QStringLiteral(中文)。转换成QString::fromLocal8Bit(“中文测试”)也可以。

#pragma execution_character_set("UTF-8")

或者通过 vs 高级保存选项进行设置。
在这里插入图片描述

2. 将GBK转换成QString

char *src = "元数据中文GBK";
//本地编码方式 默认GBK
QString str1 = QString::fromLocal8Bit(src);

3. 将QString 转换成GBK

注意:vs 里面的cout 输出只能是gbk编码格式,qDebug() 输出的是utf-8格式

QString str = QString::fromLocal8Bit("中文测试");
qDebug() << str << endl;

cout << str.toStdString() << endl;		//直接进行转换会出现乱码
cout << str.toLocal8Bit().toStdString() << endl;	//正常输出

六、字符串和数值之间的转换

1.从字符串转换为数值

  • QString类从字符串转换为整数的函数有:
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const
long QString::toLong(bool *ok = Q_NULLPTR, int base = 10) const
short QString::toShort(bool *ok = Q_NULLPTR, int base = 10) const
uint QString::toUInt(bool *ok = Q_NULLPTR, int base = 10) const
ulong QString::toULong(bool *ok = Q_NULLPTR, int base = 10) const

这些函数如果不设置参数,缺省表示从十进制表示的字符串转换为整数,若指定整数基参数,还可以直接将二进制、十六进制字符串转换为整数。

  • QString将字符串转换为浮点数的函数有:
float QString::toFloat(bool *ok = Q_NULLPTR) const
double QString::toDouble(bool *ok = Q_NULLPTR) const

2. 将数值转换为字符串

可以使用QString的静态函数number()和asprintf(),也可以使用其公共函数setNum()和sprintf()。QString的sprinf()函数与C语言里的sprintf()函数的格式时一样的,而setNum()和number()函数使用另外一种格式定义,而且setNum和number有多个重载函数定义,可以处理各种类型的整数和浮点数,在处理整数时还可以指定进制,例如将一个整数直接转换为十六进制或二进制字符串。

  • static函数asprintf()原型(没有重载)
QString asprintf(const char *cformat, ...)
  • static函数number()原型及其重载
QString number(long n, int base = 10)
QString number(uint n, int base = 10)
QString number(int n, int base = 10)
QString number(ulong n, int base = 10)
QString number(qlonglong n, int base = 10)
QString number(qulonglong n, int base = 10)
//第一个参数表示所想要转换的double类型数据(就算实际参数不是double类型,形参会将其赋值为double类型)
//第二个参数和第三个参数分别表示格式和精度
QString number(double n, char format = 'g', int precision = 6)
  • public函数setNum()原型及其重载
QString & setNum(int n, int base = 10)
QString & setNum(ushort n, int base = 10)
QString & setNum(short n, int base = 10)
QString & setNum(uint n, int base = 10)
QString & setNum(long n, int base = 10)
QString & setNum(ulong n, int base = 10)
QString & setNum(qlonglong n, int base = 10)
QString & setNum(qulonglong n, int base = 10)
QString & setNum(float n, char format = 'g', int precision = 6)
QString & setNum(double n, char format = 'g', int precision = 6)  
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Qt中的QFile和QTextStream类将QString写入文件,可以按照以下步骤进行操作: 1. 首先,包含必要的头文件,如QFile、QTextStream和QTextCodec。例如: ``` #include <QFile> #include <QTextStream> #include <QTextCodec> ``` 2. 创建一个QFile对象并指定文件路径。例如: ``` QFile file("D:/Qt.txt"); ``` 3. 打开文件以进行写入,使用QIODevice::ReadWrite和QIODevice::Text参数。例如: ``` file.open(QIODevice::ReadWrite | QIODevice::Text); ``` 4. 将要写入的QString内容转换为QByteArray格式,以便写入文件。可以使用QString的toUtf8()方法进行转换。例如: ``` QString content = "写入文件的内容"; QByteArray str = content.toUtf8(); ``` 5. 使用QTextStream对象将转换后的内容写入文件。例如: ``` QTextStream stream(&file); stream << str; ``` 6. 关闭文件。例如: ``` file.close(); ``` 这样,你就成功将QString写入文件了。如果文件已经存在,可以通过判断文件是否存在来避免覆盖原文件。如果文件已经存在,可以选择是否进行覆盖操作。例如: ``` if (file.exists()) { QMessageBox::warning(this, "创建文件", "文件已经存在!"); } else { // 文件不存在,进行写入操作 // ... } ``` 如果你想修改已经存在的文件,可以先打开文件并读取其内容,然后再进行修改并保存。你可以使用类似以下的代码: ``` // 打开文件并读取内容 QFile file("D:/Qt.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream ts(&file); QString str_get = ts.readAll(); file.close(); // 进行修改并保存 file.open(QIODevice::ReadWrite | QIODevice::Text); QByteArray strb = str_get.toUtf8(); file.write(strb); file.close(); ``` 请注意,这只是一个示例,你可以根据实际需求进行修改和适应。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Qt文件操作详解(创建、写入、删除、INI、XML文件等)](https://blog.csdn.net/qq_40194498/article/details/79726388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值