Редактирование: Qt/FAQ/QtCore

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 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]]
+

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!