кв. получить часть QString

Я хочу получить QString из другого QString, когда буду знать нужные индексы. Например: Основная строка: "Это строка". Я хочу создать новый QString из первых 5 символов и получить "Этот".
ввод: первый и последний номер символа.
вывод:< /strong> новый QString.

Как его создать?

P.S. Не только первые несколько букв, но и с середины строки, например с 5 по 8.


person AlekseyS    schedule 28.09.2011    source источник


Ответы (2)


Если вам не нужно изменять подстроку, вы можете использовать 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"
person Alan    schedule 28.09.2011
comment
Во втором примере вы можете сделать: QStringRef subString = myString.midRef(5,2); - person Keith; 31.01.2013
comment
Обратите внимание, что использование QStringRef — это дополнительная сложность оптимизации. Если вы не выполняете тяжелые манипуляции со строками, и вы действительно выиграете от оптимизации (в большинстве случаев вы этого не сделаете), безопаснее и проще использовать QString. - person laurent; 10.06.2014
comment
Но когда я хочу использовать для qlabel как текст, мне нужно преобразовать его в QString? Или есть способ напрямую использовать QStringRef? - person user1767754; 10.01.2015
comment
@this.lau_ Я помню, что все подстроки Java работали таким образом по умолчанию, но позже, увидев случаи, когда небольшая подстрока какой-то огромной строки препятствовала сборке мусора огромной строки, они избавились от этого поведения. - person Andy; 12.06.2015
comment
Обратите внимание, что QStringRef в качестве первого аргумента принимает указатель на QString. - person Binary Mind; 14.11.2016
comment
@Andy, в Qt поведение немного отличается - QString, на которую ссылается QStringRef, может быть удалена, и в этом случае 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. - person laurent; 24.12.2016

Используйте функцию left:

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

Также взгляните на mid(), если вы хотите больше контроля.

person laurent    schedule 28.09.2011