QT 4: программирование GUI на С++
Шрифт:
Наконец, заголовочный файл <QtGlobal>, который включается в любой другой заголовочный файл Qt, содержит несколько полезных определений, в том числе функцию qAbs, которая возвращает абсолютное значение аргумента, и функции qMin и qMax, которые возвращают максимальное или минимальное значение двух значений.
Строки, массивы байтов и объекты произвольного типа
QString, QByteArray и QVariant —
Мы начнем с рассмотрения типа QString. Строковые данные применяются в любой программе с графическим пользовательским интерфейсом и не только непосредственно для пользовательского интерфейса, но часто и в качестве структур данных. В стандартном составе С++ содержится два типа строк: традиционные символьные массивы языка С с завершающим символом «\0» и класс std::string. Класс QString содержит 16-битовые значения в коде Unicode. Unicode содержит в качестве подмножеств коды ASCII и Latin-1 с их обычным числовым представлением. Но поскольку QString имеет 16-битовые значения, он может представлять тысячи других символов, используемых для записи букв большинства мировых языков. Дополнительную информацию по кодировке Unicode вы найдете в главе 17 .
При использовании QString не стоит беспокоиться о таких не очень понятных вещах, как выделение достаточного объема памяти или гарантирование завершения данных символом '\0'. Концептуально строки QString можно рассматривать как вектор символов QChar. Внутри QString могут быть символы '\0'. Функция length возвращает размер строки, включая символы '\0'.
Класс QString содержит бинарный оператор +, обеспечивающий конкатенацию двух строк, и оператор += для добавления одной строки в конец другой. Поскольку QString заранее автоматически добавляет память в конец данных строки, построение строки путем повторения операций добавления символов в конец строки выполняется очень быстро. Ниже приводится пример обоих операторов:
Существует также функция QString::append, которая делает то же самое, что и оператор +=:
Совершенно другой способ объединения строк заключается в использовании функции sprintf класса QString:
Данная функция поддерживает спецификаторы формата, используемые функцией библиотеки С++ sprintf. В приведенном выше примере переменной str присваивается значение «perfect competition 100.0%» (абсолютно безупречное соревнование).
Имеется еще один способ составления строк из других строк или чисел, и он заключается в использовании функции arg:
В
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 при неудачном поиске и принимает в качестве необязательных аргументов начальную позицию и флажок учета регистра.