QT 4: программирование GUI на С++
Шрифт:
В этом примере «%1» заменяется словом «permissive» (либеральное), «%2» заменяется словом «society» (общество), «%3» заменяется на «1950» и «%4» заменяется на «1970». В результате получаем «permissive society (1950s — 1970s)» (либеральное общество в 1950—70 годах). Функция arg перегружается для обработки различных типов данных. В некоторых случаях используются дополнительные параметры для управления шириной поля, базой числа или точностью числа с плавающей точкой. В целом гораздо лучше использовать arg, а не sprintf, поскольку эта функция сохраняет тип, полностью поддерживает Unicode
QString может преобразовывать числа в строки, используя статическую функцию QString::number:
Или это можно сделать при помощи функции setNum:
Обратное преобразование строки в число осуществляется при помощи функций toInt, toLongLong, toDouble и так далее. Например:
Этим функциям передается необязательный параметр—ссылка на переменную типа bool, которая устанавливается на значение true или false в зависимости от успешности преобразования. Если преобразование завершается неудачей, эти функции возвращают 0.
Имея некоторую строку, нам часто приходится выделять какую-то ее часть. Функция mid возвращает подстроку заданной длины (второй аргумент), начиная с указанной позиции (первый аргумент). Например, следующий программный код выводит на консоль слово «pays» [6] :
6
Используемый здесь удобный синтаксис qDebug << arg требует включения заголовочного файла <QtDebug>, в то время как синтаксис qDebug("...", arg) доступен в любом файле, который включает по крайней мере один заголовочный файл Qt.
Существуют также функции left и right, которые выполняют аналогичную работу. Обеим функциям передается количество символов n, и они возвращают первые и последние n символов строки. Например, следующий программный код выдает на консоль слова «polluter principle»:
Если требуется определить, содержится ли в строке конкретный символ, подстрока или соответствует ли строка регулярному выражению, мы можем использовать один из вариантов функции indexOf класса QString:
В результате i становится равным 4. Функция indexOf возвращает -1 при неудачном поиске и принимает в качестве необязательных аргументов начальную позицию и флажок учета регистра.
Если мы просто хотим проверить начальные или конечные символы строки, мы можем использовать функции startsWith
и endsWith:Это проще и быстрее, чем:
Оператор сравнения строк == зависит от регистра. Если сравниваются строки, которые пользователь видит на экране, обычно правильным решением будет использование функции localeAwareCompare, а если необходимо сделать сравнение не зависимым от регистра, мы можем использовать функции toUpper или toLower. Например:
Если мы хотим заменить определенную часть строки другой подстрокой, мы можем использовать функцию replace:
Результатом является «sunny day» (солнечный день). Этот программный код может быть переписан с применением функций remove и insert:
Во-первых, мы удаляем шесть символов, начиная с позиции 2, и в результате получаем строку «а_ _day» (с двумя пробелами), затем мы вставляем слово «sunny» в позицию 2.
Существуют перегруженные версии функции replace, которые заменяют все подстроки, совпадающие со значением первого аргумента, вторым аргументом. Например, ниже показано, как можно заменить все символы «&» в строке на «&»:
Часто требуется удалять из строки пробельные символы (пробелы, символы табуляции и перехода на новую строку). QString имеет функцию, которая удаляет эти символы с обоих концов строки:
Строку str можно представить в виде
Строка, возвращаемая функцией trimmed, имеет вид
При обработке введенных пользователем данных нам часто необходимо, кроме удаления пробельных символов с обоих концов строки, заменить каждую последовательность таких символов одним пробелом. Именно это выполняет функция simplified:
Строка, возвращаемая функцией simplified, имеет вид
Строку можно разбить на подстроки типа QStringList при помощи функции QList::split:
В приведенном выше примере мы разбиваем строку «polluter pays principle» на три подстроки: «polluter», «pays» и «principle». Функция split имеет необязательный третий аргумент, показывающий, надо ли оставлять пустые подстроки (режим по умолчанию) или нет.