На этом шаге рассмотрим класс QString.
Практически все приложения оперируют текстовыми данными. В Qt реализован класс QString, объекты которого могут хранить строки, находящиеся в формате Unicode, где каждый символ занимает два байта.
Принцип хранения данных аналогичен классу QVector, единственное отличие состоит в том, что элементы всегда относятся к символьному типу QChar, т. е., можно сказать, строка — это контейнер для хранения символов. Класс QString предоставляет целую серию методов и операторов, позволяющих проводить со строками разного рода операции, например соединять строки, осуществлять поиск подстрок, преобразовывать их в верхний или нижний реестр и многое другое.
Строки можно сравнивать друг с другом при помощи операторов сравнения ==, !=, <, >, <= и >=. Результат сравнения зависит от регистра символов, например:
QString str = "Qt"; bool b1 = (str == "Qt"); // b1 = true bool b2 = (str != "QT"); // b2 = true
При помощи метода isEmpty() можно узнать, не пуста ли строка. Того же результата можно добиться, проверив длину строки методом length(). В классе QString имеются различия между пустыми и нулевыми строками, таким образом, строка, созданная при помощи конcтруктора по умолчанию, является нулевой строкой. Например:
QString str1 = ""; QString str2; str1.isNull(); // false str2.isNull(); // true
Объединение строк является одной из самых распространенных операций. Провести его можно разными способами, скажем, при помощи операторов += и + или вызовом метода append(). Например:
QString str1 = "Библиотека"; QString str2 = "Qt"; QString str3 = str1 + str2; // str3 = "Библиотека Qt" str1.append(str2); //str1 = "Библиотека Qt"
Для замены определенной части строки другой класс QString предоставляет метод replace(). Например:
QString str = "Программирование";
str.replace("ирование", "а"); // str = "Программа"
Для преобразования данных строки в верхний или нижний регистр используются методы toLower() или toUpper(). Например:
QString str1 = "ПрОгРаМмА"; QString str2 = str1.toLower(); // str2 = "программа" QString str3 = str1.toUpper(); // str3 = "ПРОГРАММА"
При помощи метода setNum() можно конвертировать числовые значения в строковые. Того же результата можно добиться вызовом статического метода number(). Например:
QString str = QString::number(35.123);
Аналогичного результата можно добиться также и при помощи текстового потока Qt. Например:
QString str; QTextStream(&str) << 35.123;
Преобразование из строкового в числовое значение производится методами, содержащими в своем имени название типа. В этих методах вторым параметром можно передавать ссылку на переменную булевого типа для получения информации о том, успешно ли была проведена операция. Например:
bool ok; QString str = "234"; double d = str.toDouble(&ok); int n = str.toInt(&ok);
Строка может быть разбита на массив строк при помощи метода split() класса QStringList. Следующий пример создаст список из двух строк: "Библиотека" и "Qt":
QString str = "Библиотека Qt"; QStringList list = str.split(" ");
Операция объединения списка строк в одну строку производится при помощи метода join(). Например, объединить список из двух элементов ("Библиотека" и "Qt") в одну строку, разделив их знаком пробела, можно следующим образом:
str = list.join(" ");
На следующем шаге рассмотрим контейнерные классы.