QT 4: программирование GUI на С++
Шрифт:
Если мы просто хотим проверить начальные или конечные символы строки, мы можем использовать функции startsWith и endsWith:
Это проще и быстрее, чем:
Оператор сравнения строк == зависит от регистра. Если сравниваются строки, которые пользователь видит на экране, обычно правильным решением будет использование функции localeAwareCompare,
Если мы хотим заменить определенную часть строки другой подстрокой, мы можем использовать функцию replace:
Результатом является «sunny day» (солнечный день). Этот программный код может быть переписан с применением функций remove и insert:
Во-первых, мы удаляем шесть символов, начиная с позиции 2, и в результате получаем строку «а_ _day» (с двумя пробелами), затем мы вставляем слово «sunny» в позицию 2.
Существуют перегруженные версии функции replace, которые заменяют все подстроки, совпадающие со значением первого аргумента, вторым аргументом. Например, ниже показано, как можно заменить все символы «&» в строке на «&»:
Часто требуется удалять из строки пробельные символы (пробелы, символы табуляции и перехода на новую строку). QString имеет функцию, которая удаляет эти символы с обоих концов строки:
Строку str можно представить в виде
Строка, возвращаемая функцией trimmed, имеет вид
При обработке введенных пользователем данных нам часто необходимо, кроме удаления пробельных символов с обоих концов строки, заменить каждую последовательность таких символов одним пробелом. Именно это выполняет функция simplified:
Строка, возвращаемая функцией simplified, имеет вид
Строку можно разбить на подстроки типа QStringList при помощи функции QList::split:
В приведенном выше примере мы разбиваем строку «polluter pays principle»
Элементы списка QStringList могут объединяться в одну строку при помощи функции join. Передаваемый функции join аргумент вставляется между каждой парой объединяемых строк. Например, ниже показано, как создавать одну строку из всех строк списка QStringList, расположенных в алфавитном порядке и разделенных символом перехода на новую строку:
При обработке строк нам часто приходится определять, пустая строка или нет. Это делается при помощи вызова функции isEmpty или проверкой равенства нулю возвращаемого функцией length значения.
Преобразование строк const char * в QString в большинстве случаев выполняется автоматически, например:
Здесь мы добавляем строку const char * в конец строки QString без выполнения явного преобразования. Для явного преобразования const char * в QString выполните приведение типа в QString или вызовите функцию fromAscii или fromLatin1. (Работа с литеральными строками в других кодировках рассматривается в главе 17 .)
Для преобразования QString в const char * используйте функцию toAscii или toLatin1. Эти функции возвращают QByteArray, который может быть преобразован в const char *, используя QByteArray::data или QByteArray::constData. Например:
Для удобства в Qt предусмотрен макрос qPrintable, который эквивалентен последовательности функций toAscii.constData:
Когда мы вызываем функции data или constData для объектов типа QByteArray, владельцем возвращаемой строки будет этот объект. Это означает, что нам не надо беспокоиться о возможных утечках памяти — Qt вернет нам память. С другой стороны, мы должны проявлять осторожность и не использовать указатель слишком долго. Если объект QByteArray не хранится в переменной, он будет автоматически удален в конце выполнения оператора.