Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| = QtCore - ядро не-GUI классов, используемое другими модулями = | | = QtCore - ядро не-GUI классов, используемое другими модулями = |
| == Строки == | | == Строки == |
- | За обработку строк в Qt отвечает класс QString, который хранит строки в Unicode в виде последовательностей 16-битовых символов QChar. Строки QString можно рассматривать как вектор символов QChar. При использовании QString не стоит беспокоится о таких вещах, как выделение достаточного объёма памяти или гарантирование завершения данных символом '\0'. Внутри QString могут быть символы '\0', функция length() вернет размер строки, включаю символы '\0'. | + | За обработку строк в Qt отвечает класс QString. |
- | | + | === Кодировка === |
| + | === Доступ к подстрокам === |
| === Манипуляции со строками === | | === Манипуляции со строками === |
- | Класс QString содержит operator+, который обеспечивает конкатенацию двух строк и operator+= для добавления одной строки в конец другой:
| |
- | <source lang="cpp">
| |
- | QString sz, sz1="cross", sz2="platform";
| |
- | sz = sz1 + sz2; // sz == "crossplatform"
| |
- | sz += ".ru"; // sz == "crossplatform.ru"
| |
- | </source>
| |
- | Также есть функция append, которая аналогична operator+=:
| |
- | <source lang="cpp">
| |
- | QString sz;
| |
- | sz.append( "crossplatform");
| |
- | sz.append( ".ru");
| |
- | // sz == "crossplatform.ru"
| |
- | </source>
| |
- | Если функция append добавляет одну строку в конец другой, то функция prepend добавляет одну строку в начало другой:
| |
- | <source lang="cpp">
| |
- | sz.prepend( "http://");
| |
- | // sz == "http://crossplatform.ru"
| |
- | </source>
| |
- | Также можно добавить нужную нам строку в любую позицию другой строки:
| |
- | <source lang="cpp">
| |
- | sz.insert( 7, QString("wiki."));
| |
- | // sz == "http://wiki.crossplatform.ru"
| |
- | </source>
| |
- | Для совместимости с STL в классе QString введены функции push_back и push_front, которые аналогичны функциям append и prepend, соответственно:
| |
- | <source lang="cpp">
| |
- | QString sz = "crossplatform";
| |
- | sz.push_back( ".ru");
| |
- | // sz == "crossplatform.ru"
| |
- | sz.push_front( "http://");
| |
- | // sz == "http://crossplatform.ru"
| |
- | </source>
| |
- | Если нужно удалить часть строки, то для этого есть функция remove:
| |
- | <source lang="cpp">
| |
- | QString sz = "http://wiki.crossplatform.ru";
| |
- | sz.remove(7, 5);
| |
- | // sz == "http://crossplatform.ru"
| |
- | </source>
| |
- | или это же можно сделать так:
| |
- | <source lang="cpp">
| |
- | QString sz = "http://wiki.crossplatform.ru";
| |
- | sz.remove( "wiki.");
| |
- | // sz == "http://crossplatform.ru"
| |
- | </source>
| |
- |
| |
- | <!--
| |
- | replace
| |
- | sprintf
| |
- | arg
| |
- | split
| |
- | compare
| |
- | reserve
| |
- | resize
| |
- | -->
| |
- |
| |
- | === Кодировка ===
| |
- | Есть строка в кодировке Windows-1251, и хотим превратить её в Unicode. Вот как это можно сделать:
| |
- | <source lang="cpp-qt">
| |
- | QByteArray baString = "Тестовая строка";
| |
- | QString szString;
| |
- | // Создаём кодек для кодировки Windows-1251
| |
- | QTextCodec pCodec = QTextCodec::codecForName("Windows-1251");
| |
- | // Преобразуем из Windows-1251 в Unicode
| |
- | szString = pCodec->toUnicode( baString);
| |
- | </source>
| |
- | Преобразование строки из Unicode в Windows-1251:
| |
- | <source lang="cpp-qt">
| |
- | baString = codec->fromUnicode( szString);
| |
- | </source>
| |
- |
| |
- | <!--
| |
- | // Устанавливаем кодировку для Locale
| |
- | QTextCodec::setCodecForLocale( pCodec);
| |
- | // Устанавливаем кодировку для "tr"
| |
- | QTextCodec::setCodecForTr( pCodec);
| |
- | // Устанавливаем кодировку для строк для строк
| |
- | QTextCodec::setCodecForCStrings( pCodec);
| |
- | -->
| |
| | | |
| == Массивы == | | == Массивы == |
| == Контейнеры == | | == Контейнеры == |
| == Дата и время == | | == Дата и время == |
- | [[Qt:Документация_4.3.2/time | Классы работы с датой]] можно разделить на две группы:
| |
- | # [[QDateTime]], [[QDate]], [[QTime]] - классы предоставляющие функции для работы с датой и временем.
| |
- | # [[QBasicTimer]], [[QTimer]] - классы для работы с таймерами.
| |
- |
| |
| == Регулярные выражения == | | == Регулярные выражения == |
| == События == | | == События == |
Строка 94: |
Строка 14: |
| == Работа с плагинами == | | == Работа с плагинами == |
| == Работа с файлами и директориями == | | == Работа с файлами и директориями == |
- | ===Рекурсивный поиск файлов и папок=== | + | == Рисование == |
- | <source lang="cpp-qt">// Сама рекурсивная функция для поиска файлов и папок
| + | |
- | bool FindFileAndDir( QString szDir)
| + | |
- | {
| + | |
- | qint16 qnFileCount = 0;
| + | |
- | QDir dir( szDir);
| + | |
- | foreach( QFileInfo fi, dir.entryInfoList())
| + | |
- | {
| + | |
- | QString szFileName = fi.absoluteFilePath();
| + | |
- | if( fi.isDir())
| + | |
- | {
| + | |
- | if( fi.fileName()=="." || fi.fileName()=="..")
| + | |
- | continue;
| + | |
- | | + | |
- | FindFileAndDir( szFileName);
| + | |
- | }
| + | |
- | if( fi.isFile())
| + | |
- | {
| + | |
- | qnFileCount++;
| + | |
- | }
| + | |
- | }
| + | |
- | qDebug( "Dir: %s, File count: %d", qPrintable( szDir), qnFileCount);
| + | |
- | | + | |
- | return true;
| + | |
- | }
| + | |
- | | + | |
- | int main(int argc, char *argv[])
| + | |
- | {
| + | |
- | QString szDir="c:\\windows\\system32\\drivers";
| + | |
- | FindFileAndDir( szDir);
| + | |
- | | + | |
- | return 0;
| + | |
- | }</source>
| + | |
- | | + | |
- | | + | |
- | ===Другой вариант рекурсивного поиска файлов===
| + | |
- | <source lang="cpp-qt">
| + | |
- | QStringList fileFind(QString dirname)
| + | |
- | {
| + | |
- | QStringList files;
| + | |
- | foreach (QString dir, QDir(dirname).entryList(QStringList(),QDir::Dirs | QDir::NoDotAndDotDot))
| + | |
- | files.append(fileFind(QDir(dirname).filePath(dir)));
| + | |
- | foreach (QString file, QDir(dirname).entryList(QStringList(),QDir::Files | QDir::NoDotAndDotDot))
| + | |
- | files << QDir(dirname).filePath(file);
| + | |
- | return files;
| + | |
- | }
| + | |
- | </source>
| + | |
- | | + | |
- | === Удаление директории с поддиректориями и файлами ===
| + | |
- | <source lang="cpp-qt">//
| + | |
- | void DeleteAllFiles(const QString &path)
| + | |
- | {
| + | |
- | QDir oDir(path);
| + | |
- | QStringList files = oDir.entryList(QDir::Files);
| + | |
- | | + | |
- | QStringList::Iterator itFile = files.begin();
| + | |
- | while (itFile != files.end())
| + | |
- | {
| + | |
- | QFile oFile(path + "/" + *itFile);
| + | |
- | oFile.remove();
| + | |
- | ++itFile;
| + | |
- | }
| + | |
- | | + | |
- | QStringList dirs = oDir.entryList(QDir::Dirs);
| + | |
- | QStringList::Iterator itDir = dirs.begin();
| + | |
- | while (itDir != dirs.end())
| + | |
- | {
| + | |
- | if (*itDir != "." && *itDir != "..") DeleteAllFiles(path + "/" + *itDir);
| + | |
- | ++itDir;
| + | |
- | }
| + | |
- | | + | |
- | oDir.rmdir(path);
| + | |
- | }
| + | |
- | | + | |
- | int main(int argc, char *argv[])
| + | |
- | {
| + | |
- | QString path="c:\\windows\\system32"; // перед запуском измените путь, а то как бы чего не вышло! :)
| + | |
- | DeleteAllFiles( path);
| + | |
- | | + | |
- | return 0;
| + | |
- | }</source>
| + | |
- | | + | |
- | == См. также ==
| + | |
- | * [[Установка Qt4.3.x]]
| + | |
- | * [[Развертывание приложений Qt в MS Windows]]
| + | |
- | | + | |
- | | + | |
- | [[Категория:Qt FAQ]]
| + | |