Qt. отримати частину QString


80

Я хочу отримати QStringвід іншого QString, коли знаю необхідні індекси. Наприклад: Основний рядок: "Це рядок" . Я хочу створити новий QStringіз перших 5 символів і отримати "Це" .
вхід: перший і останній номер символу.
вихід: новий QString.

Як його створити?

PS Не тільки перші кілька літер, а також від середини рядка, наприклад від 5 до 8.

Відповіді:


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- це оптимізація, яка має додаткову складність. Якщо ви не робите важких маніпуляцій з рядками, і ви насправді отримаєте вигоду від оптимізації (у більшості випадків ви цього не зробите), безпечніше та простіше використовувати a QString.
Лоран,

Але коли я хочу використовувати для qlabel як текст, я повинен передати його в QString? Або є спосіб безпосереднього використання QStringRef?
user1767754

1
@ this.
Енді

1
@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.
Лоран,

52

Використовуйте leftфункцію:

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

Також подивіться, mid()чи хочете ви більше контролю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.