Некоторое время назад мы уже достаточно подробно рассматривали работу с текстовыми файлами в Qt. Однако один важный нюанс всё-же остался за рамками той статьи. Поэтому есть смысл вернуться к данной теме.
Как известно, метод write класса QFile, который используется для записи, в том числе, текстовых файлов, принимает в качестве параметра массив байт. А, точнее объект QByteArray. И здесь, при работе со строками программиста ожидает подвох.
Дело в том, что если передать методу write строку в виде литерала, как мы делали это в предыдущей статье (см. пример кода ниже), то ничего особенного не произойдёт.
1 |
file.write("Test string2"); |
Строка будет успешно записана в файл.
Но, если использовать переменную типа QString, возникнет ошибка несовместимости типов. Поэтому, код приведённый ниже работать не будет.
1 2 |
QString str = "Test string2"; file.write(str); // НЕ РАБОТАЕТ!!! |
Решить эту проблему можно путём преобразования QString в QByteArray.
Для этого нам не придётся писать никаких алгоритмов связанных с преобразованием потому, что библиотека Qt уже содержит готовое решение в виде ряда методов класса QString, которые преобразуют его в QByteArray в соответствии с выбранной кодировкой. Но, т. к. чаще всего в приложениях используются строки в кодировке UTF-8, среди них программисту вероятнее всего будет нужен только один — toUtf8.
Если мы доработаем предыдущий пример с использованием того же toUtf8, то мы сможем сохранить на QString в текстовый файл.
1 2 |
QString str = "Test string2"; file.write(str.toUtf8()); // РАБОТАЕТ!!! |
Если вдруг текстовый файл имеет другую кодировку, следует использовать соответствующий ей метод.
Эти методы на самом деле очень легко определить по их имени, в котором после to указано название кодировки. Например, если требуется сохранить текст в ASCII, то вместо toUtf8 следует использовать toAscii.
Таким образом, можно сохранить в текстовый файл любую переменную QString, а не только значение литерала.
Добавить комментарий