Qt. get part of QString
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.
Admin
Updated on March 08, 2020Comments
-
Admin about 4 years
I want to get
QString
from anotherQString
, when I know necessary indexes. For example: Main string: "This is a string". I want to create newQString
from first 5 symbols and get "This ".
input : first and last char number.
output : newQString
.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 over 11 yearsIn your second example, you can do: QStringRef subString = myString.midRef(5,2);
-
laurent almost 10 yearsNote 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 aQString
. -
user1767754 over 9 yearsBut 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 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 over 7 yearsNote that
QStringRef
as first argument takes pointer toQString
. -
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.