Qt 获得QString的一部分


80

当我知道必要的索引时,我想QString从另一个获取QString。例如:主字符串:“ This is a string”。我想QString从前5个符号中创建新符号并得到“ This”
输入:第一个和最后一个字符数。
输出:QString

如何创建呢?

PS不仅前几个字母,而且从行中间开始,例如从5到8。

Answers:


115

如果您不需要修改子字符串,则可以使用QStringRef。本QStringRef类是只读包装现有QString引用现有的字符串中的子字符串。与创建一个QString包含子字符串的新对象相比,这提供了更好的性能。例如

QString myString("This is a string");
QStringRef subString(&myString, 5, 2); // subString contains "is"

如果确实需要修改字符串,然后left()mid()并且right()会做你需要什么?

QString myString("This is a string");
QString subString = myString.mid(5,2); // subString contains "is"
subString.append("n't"); // subString contains "isn't"

1
在第二个示例中,您可以执行以下操作:QStringRef subString = myString.midRef(5,2);
基思

2
请注意,使用QStringRef是一种优化,但会带来额外的复杂性。除非您进行大量的字符串操作,否则您实际上会从优化中受益(大多数情况下不会),使用会更安全,更简单QString
劳伦特

但是,当我想使用qlabel作为文本时,必须将其转换为QString吗?还是有一种直接使用QStringRef的方法?
user1767754'1

1
@ this.lau_我记得默认情况下Java子字符串都以这种方式工作,但是后来在看到一些大字符串的小子字符串阻止大字符串被垃圾收集的情况之后,它们摆脱了这种行为。
安迪2015年

1
@Andy,在Qt中,行为略有不同-QStringRef所引用的QString可能会被删除,在这种情况下,QStringRef变得无效。这就是为什么额外的复杂性通常不值得的原因。引用文档:We suggest that you only use this class in stable code where profiling has clearly identified that performance improvements can be made by replacing standard string operations with the optimized substring handling provided by this class.
laurent

52

使用left功能:

QString yourString = "This is a string";
QString leftSide = yourString.left(5);
qDebug() << leftSide; // output "This "

mid()如果需要更多控制,也可以看看。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.