Qt学习之QString:QString常见用法

前言(来自官方文档描述)

        ~~~~~~~        QString 存储一个 16 位字符串,其中每个对应于一个 UTF-16 代码单元。(代码值高于 65535 的 Unicode 字符使用代理项对存储,即两个连续的 s。

        ~~~~~~~        是一种国际标准,支持当今使用的大多数书写系统。它是 US-ASCII (ANSI X3.4-1986) 和 Latin-1 (ISO 8859-1) 的超集,所有 US-ASCII/Latin-1 字符都位于相同的代码位置。

        ~~~~~~~        在后台,QString 使用(写入时复制)来减少内存使用并避免不必要的数据复制。这也有助于减少存储 16 位字符而不是 8 位字符的固有开销。

        ~~~~~~~        除了QString之外,Qt还提供了存储原始字节和传统的8位“\0”终止字符串的类。在大多数情况下,QString 是您想要使用的类。它在整个Qt API中使用,Unicode支持确保您的应用程序易于翻译,如果您想在某个时候扩展应用程序市场。合适的两种主要情况是需要存储原始二进制数据,以及内存保护至关重要时(如嵌入式系统)

1、字符串末尾追加append()

//第一种:append
	QString str = "Hello";
	str.append("world");
	//str = Helloworld,想让两个词分开还需要中间差一个空白格
	QString str = "Hello";
	str.append(" ");
	str.append("world");
	//str = Hello world


//第二种:直接写在一起
	QString str1 = "Hello";
	QString str2 = "world";
	QString str3 = str1 + str2;
	//str3 = Helloworld


//第三种:insert
	QString str1 = "Hello";
	QString str2 = "world";
	str1.insert( str1.size() + str2);
	//str1 = Helloworld

//注意:append要比insert快很多,他在数据末尾预先分配了空间

2、去除字符串头尾的空白字符trimmed()

	QString str = "  你好 ";
    str = str.trimmed();
	// str == "你好"

3、字符串全部转大写或者转小写

//全部转大写
	QString str = "TeXt";
    str = str.toUpper(); 
    // str == "TEXT"

//全部转小写
	QString str = "The Qt PROJECT";
    str = str.toLower(); 
    // str == "the qt project"

4、获取字符串长度size()、length()

//第一种:size
    QString str1 = "Hello";
    int i = str1.size();
	//i = 5;

//第二种:length
	QString str1 = "Hello";
    int i = str1.length();
	//i = 5

5、替换字符串的子字符串replace()

	QString x = "Say yes!";
 	QString y = "no";
 	x.replace(4, 3, y);
 	// x == "Say no!"
 	//三个参数为:4代表从第几位开始替换,3代表替换几位总共,y代表要替换上去的字符

6、参数替换占位符

//官方代码
	QString i;           
    QString total;       
    QString fileName;    

    QString status = QString("Processing file %1 of %2: %3")
                 .arg(i).arg(total).arg(fileName);
                
//实例演示
	QString i = "I";
	QString x = "LOVE";
	QString y = "YOU";
	QString z = QString("%1 %2 %3").arg(i).arg(x).arg(y);
	//z = I LOVE YOU

7、分割字符串split()

//第一种:常见的逗号,空白格,冒号等等作为分割符
	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 = "abc";
	auto parts = str.split("");
	// parts: {"", "a", "b", "c", ""}    QString::SkipEmptyParts可以跳过空的字符

	QString str = "/a/b/c/";
	auto parts = str.split('/');
	// parts: {"", "a", "b", "c", ""}

//第二种:正则表达式作为分隔符
	QString str;
	QStringList list;

	str = "Some  text\n\twith  strange whitespace.";
	list = str.split(QRegExp("\\s+"));
	// list: [ "Some", "text", "with", "strange", "whitespace." ],使用一个或多个空白字符作为分隔符

	str = "This time, a normal English sentence.";
	list = str.split(QRegExp("\\W+"), QString::SkipEmptyParts);
	// list: [ "This", "time", "a", "normal", "English", "sentence" ],使用任何非单词字符作为分隔符

	str = "Now: this sentence fragment.";
	list = str.split(QRegExp("\\b"));
	// list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ],使用零长度作为分隔符

8、字符串比较是否一样以及区分大小写compare()

    QString str1 = "Hello";
    QString str2 = "hello";
    int i = QString::compare(str1,str2,Qt::CaseInsensitive);
    //i = 0 ;Qt::CaseInsensitive为不区分大小写,如果两个字符串相等,则返回0;如果不相等,则看他们在字典的排序顺序,若第一个顺序小于第二个,返回负数,若大于第二个,则返回正数

	int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);  // x == 0
	int y = QString::compare("auto", "Car", Qt::CaseSensitive);     // y > 0
	int z = QString::compare("auto", "Car", Qt::CaseInsensitive);   // z < 0

9、字符串str1是否包含字符串str2:contains

	QString str = "Peter Pan";
	str.contains("peter", Qt::CaseInsensitive);    // returns true

10、检查字符串是否以特定字符开头或结束startswith()、endswith()

//是否特定字符开头
	QString str = "Bananas";
	str.startsWith("Ban");     // returns true
	str.startsWith("Car");     // returns false
//是否特定字符结尾
	QString str = "Bananas";
	str.endsWith("anas");         // returns true
	str.endsWith("pple");         // returns false

11、查找子字符串在字符串中第一次或者最后一次出现的位置

//查找字符串出现的位置以及从第几位查起
	QString x = "sticky question";
	QString y = "sti";
	x.indexOf(y);               // returns 0,从头查起,返回出现的位置
	x.indexOf(y, 1);            // returns 10,从1位查起,返回出现的位置
	x.indexOf(y, 10);           // returns 10,从10位查起,返回出现的位置
	x.indexOf(y, 11);           // returns -1,从11位查起,返回出现的位置,-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

12、在字符串开头添加字符prepend()

	QString x = "ship";
	QString y = "air";
	x.prepend(y);
	// x == "airship"

13、返回字符串左起或者右起特定长度的字符

//左起第一种:返回的位数没有超过字符串长度
	QString x = "Pineapple";
	QString y = x.left(4);      // y == "Pine"

//左起第二种:返回位数超过了字符串长度,剩余的用特定字符代替
	QString s = "apple";
	QString t = s.leftJustified(8, '.');    // t == "apple..."

//右起第一种:返回的位数没有超过字符串长度
	QString x = "Pineapple";
	QString y = x.right(5);      // y == "apple"
//右起第二种:返回位数超过了字符串长度,剩余的用特定字符代替
	QString s = "apple";
	QString t = s.rightJustified(8, '.');    // t == "...apple"

14、从特定位置开始移除特定长度的字符remove()

	QString s = "Montreal";
	s.remove(1, 4);
	// s == "Meal"

	QString t = "Ali Baba";
	t.remove(QChar('a'), Qt::CaseInsensitive);
	// t == "li Bb"

15、判断字符串是否为空isEmpty()、isNull()

//第一种
	QString().isEmpty();            // returns true
	QString("").isEmpty();          // returns true
	QString("x").isEmpty();         // returns false
	QString("abc").isEmpty();       // returns false

//第二种
	QString().isNull();             // returns true
	QString("").isNull();           // returns false
	QString("abc").isNull();        // returns false

16、QString转int、double、longlong、long、short

//转double
	QString str = "1234.56";
	double val = str.toDouble();   // val == 1234.56

	bool ok;
	double d;
	d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456
	d = QString( "1234.56e-02 Volt" ).toDouble(&ok); // ok == false, d == 0

	d = QString( "1234,56" ).toDouble(&ok); // ok == false
	d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56

	d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false
	d = QString( "1234567.89" ).toDouble(&ok); // ok == true
//转float
	QString str1 = "1234.56";
	str1.toFloat();             // returns 1234.56

	bool ok;
	QString str2 = "R2D2";
	str2.toFloat(&ok);          // returns 0.0, sets ok to false

	QString str3 = "1234.56 Volt";
	str3.toFloat(&ok);          // returns 0.0, sets ok to false

//转16进制、10进制
	QString str = "FF";
	bool ok;
	int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
	int dec = str.toInt(&ok, 10);       // dec == 0, ok == false

现总结到这里,后续有其他的再进行补充

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值