【问题标题】:Qt. get part of QStringQt。获取 QString 的一部分
【发布时间】:2011-11-26 22:26:13
【问题描述】:

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

如何创建它?

P.S.不仅是前几个字母,还包括行中间,例如从 5 到 8。

【问题讨论】:

    标签: qt substring qstring


    【解决方案1】:

    如果不需要修改子字符串,那么可以使用QStringRefQStringRef 类是现有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"
    

    【讨论】:

    • 在你的第二个例子中,你可以这样做: QStringRef subString = myString.midRef(5,2);
    • 请注意,使用QStringRef 是一种具有额外复杂性的优化。除非您正在执行繁重的字符串操作,并且您实际上会从优化中受益(在大多数情况下,您不会),否则使用 QString 会更安全、更简单。
    • 但是当我想将 qlabel 用作文本时,我必须将其转换为 QString?或者有没有办法直接使用QStringRef?
    • @this.lau_ 我记得 Java 子字符串在默认情况下都是这样工作的,但后来在看到一些大字符串的小子字符串阻止大字符串被垃圾收集的情况后,他们摆脱了这种情况行为。
    • @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.
    【解决方案2】:

    使用left函数:

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

    如果您想要更多控制权,还可以查看mid()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多