Qt. get part of QString

171,450

Solution 1

If you do not need to modify the substring, then you can use QStringRef. The QStringRef class is a read only wrapper around an existing QString that references a substring within the existing string. This gives much better performance than creating a new QString object to contain the sub-string. E.g.

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

If you do need to modify the substring, then left(), mid() and right() will do what you need...

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

Solution 2

Use the left function:

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

Also have a look at mid() if you want more control.

Share:
171,450
Admin
Author by

Admin

Updated on March 08, 2020

Comments

  • Admin
    Admin about 4 years

    I want to get QString from another QString, when I know necessary indexes. For example: Main string: "This is a string". I want to create new QString from first 5 symbols and get "This ".
    input : first and last char number.
    output : new QString.

    How to create it ?

    P.S. Not only first several letters, also from the middle of the line, for example from 5 till 8.

  • Keith
    Keith over 11 years
    In your second example, you can do: QStringRef subString = myString.midRef(5,2);
  • laurent
    laurent almost 10 years
    Note that using QStringRef is an optimization that comes with additional complexity. Unless you are doing heavy string manipulations, and you'll actually benefit from the optimization (in most cases, you won't), it's safer and simpler to use a QString.
  • user1767754
    user1767754 over 9 years
    But when i want to use to for a qlabel as text, i have to cast it to QString? Or is there a way to directly use QStringRef?
  • Andy
    Andy almost 9 years
    @this.lau_ I remember Java substrings all worked this way by default, but later after seeing cases where a small substring of some huge string prevented the huge string from getting garbage collected, they got rid of that behavior.
  • Binary Mind
    Binary Mind over 7 years
    Note that QStringRef as first argument takes pointer to QString.
  • laurent
    laurent over 7 years
    @Andy, in Qt the behaviour is slightly different - the QString that QStringRef is referencing might get deleted, in which case the QStringRef becomes invalid. This is why the additional complexity is often not worth it. To quote the doc: 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.