From 17710ae21df419989a523e18532eb8b68b597959 Mon Sep 17 00:00:00 2001 From: nayk Date: Fri, 18 Jul 2025 14:15:42 +0300 Subject: [PATCH] Initial commit --- .gitignore | 107 +++++++ ImplicitShared.md | 254 +++++++++++++++ QtCodeStyle.md | 577 ++++++++++++++++++++++++++++++++++ QtCreator.md | 61 ++++ QtThreads.md | 253 +++++++++++++++ README.md | 16 +- _resources/images/progcat.png | Bin 0 -> 68062 bytes _resources/images/qtcat.png | Bin 0 -> 57321 bytes examples/error_object.cpp | 138 ++++++++ examples/error_object.h | 73 +++++ 10 files changed, 1477 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 ImplicitShared.md create mode 100644 QtCodeStyle.md create mode 100644 QtCreator.md create mode 100644 QtThreads.md create mode 100644 _resources/images/progcat.png create mode 100644 _resources/images/qtcat.png create mode 100644 examples/error_object.cpp create mode 100644 examples/error_object.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23a669a --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +.build/ +_other/ +_distrib*/ + +# Tmp files +*~ +Thumbs.db* + +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib +*.ko +*.obj +*.elf +*.lib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +*_qmlcache.qrc + +# ---> C +# Prerequisites +*.d + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +# Fortran module files +*.mod +*.smod + diff --git a/ImplicitShared.md b/ImplicitShared.md new file mode 100644 index 0000000..065250f --- /dev/null +++ b/ImplicitShared.md @@ -0,0 +1,254 @@ +![picture](/_resources/images/qtcat.png) + +- [К списку документов](Readme.md) + +# Implicit shared в Qt + +Многие классы C++ в Qt используют неявное совместное использование данных для +максимального использования ресурсов и минимизации копирования. +Неявно совместно используемые классы являются как безопасными, так и эффективными, +когда передаются в качестве аргументов, поскольку передается только указатель на данные, +а данные копируются только тогда, когда функция записывает в них данные, т. е.copy-on-write. + +Implicit sharing в Qt — это механизм, при котором при копировании классов +не происходит копирование данных, а копирование происходит лишь тогда, +когда копии класса потребуется изменить эти данные. + +
+ +Некоторые особенности механизма: + +- При создании общего объекта счётчик ссылок устанавливается в 1. +- Когда новый объект ссылается на общие данные, счётчик ссылок увеличивается. +- Когда объект теряет ссылку на общие данные, счётчик ссылок уменьшается. +- Общие данные удаляются, когда счётчик ссылок становится равен 0. + +Implicit sharing реализован во многих классах C++ в Qt. + +
+ +При разработке таких классов используется паттерн Pimpl. + +
+ +## Pimpl + +Pimpl — Pointer to private implementation. +Это одно из названий паттерна программирования. +Еще его называют чеширским котом — «Cheshire Cat» (это название +мне больше нравится). В чем суть этого паттерна? +Основная идея этого паттерна — это вынести все приватные члены класса и, +в некоторых случаях, функционала в приватный класс. + +
+ +В Qt коде используется подход `d`-указателей. +Смысл в том что объявляется класс `XXXPrivate` и переменная публичного класса +в защищенной секции. В отдельном заголовочном файле или в `.cpp` файле уже +пишется реализация приватного класса. +Иерархия классов идет как по публичным так и по приватным классам. +Для этого объявление приватного класса обычно делается в отдельном `.h` файле, +который называется так-же как публичный, но добавляется +приставка `_p`: `qclassname_p.h`. И эти классы не устанавливаются вместе с +библиотекой, а служат лишь для сборки библиотеки. + +
+ +## Пример класса с использованием Implicit shared + +Пример класса для хранения ошибки, в котором используется Implicit shared. + +- [Заголовочный файл `error_object.h`](examples/error_object.h) + +```C +#pragma once +#ifndef NAYK_ERROR_OBJECT_H +#define NAYK_ERROR_OBJECT_H + +#include +#include +#include +#include + +class ErrorObjectPrivate; // предварительное объявление закрытого класса + +class ErrorObject +{ +public: + ErrorObject(); + ErrorObject(int module, int code, const QString &text, + const QDateTime &dateTime = QDateTime::currentDateTime()); + ErrorObject(const ErrorObject &other); + ErrorObject &operator=(const ErrorObject &other); + ~ErrorObject(); + int module() const; + void setModule(int module); + int code() const; + void setCode(int code); + QString text() const; + void setText(const QString &text); + QDateTime dateTime() const; + void setDateTime(const QDateTime &dateTime); + bool isValid() const; + bool operator==(const ErrorObject &other) const; + bool operator!=(const ErrorObject &other) const; + ErrorObject copy() const; + +private: + QSharedDataPointer d; +} + +Q_DECLARE_METATYPE(ErrorObject) + +#endif // NAYK_ERROR_OBJECT_H +``` + +- [Файл с реализацией `error_object.cpp`](examples/error_object.cpp) содержит код нашего класса `ErrorObject` +и реализацию закрытого класса `ErrorObjectPrivate` + +```C +#include "error_object.h" +#include + +// Закрытый класс ErrorObjectPrivate: + +class ErrorObjectPrivate: public QSharedData +{ +public: + int module {-1}; + int code {-1}; + QString text; + QDateTime dateTime {QDateTime::currentDateTime()}; +}; + +// Класс ErrorObject: + +ErrorObject::ErrorObject() + : d(new ErrorObjectPrivate) +{ + if ( !QMetaType::isRegistered(qMetaTypeId()) ) + qRegisterMetaType(); +} + +ErrorObject::ErrorObject(int module, int code, const QString &text, const QDateTime &dateTime) + : d(new ErrorObjectPrivate) +{ + d->module = module; + d->code = code; + d->text = text; + d->dateTime = dateTime; +} + +ErrorObject::ErrorObject(const ErrorObject &other) = default; + +ErrorObject &ErrorObject::operator=(const ErrorObject &other) = default; + +ErrorObject::~ErrorObject() = default; + +int ErrorObject::module() const +{ + return d->module; +} + +void ErrorObject::setModule(int module) +{ + d->module = module; +} + +int ErrorObject::code() const +{ + return d->code; +} + +void ErrorObject::setCode(int code) +{ + d->code = code; +} + +QString ErrorObject::text() const +{ + return d->text; +} + +void ErrorObject::setText(const QString &text) +{ + d->text = text; +} + +QDateTime ErrorObject::dateTime() const +{ + return d->dateTime; +} + +void ErrorObject::setDateTime(const QDateTime &dateTime) +{ + d->dateTime = dateTime; +} + +bool ErrorObject::isValid() const +{ + return (d->module >= 0) && ((d->code >= 0) || !d->text.isEmpty()); +} + +bool ErrorObject::operator==(const ErrorObject &other) const +{ + return (d->module == other.d->module) && + (d->dateTime == other.d->dateTime) && + ( + ((d->code == other.d->code) && (d->code >= 0)) + || + ((d->code < 0) && (other.d->code < 0) && (d->text == other.text())) + ); +} + +bool ErrorObject::operator!=(const ErrorObject &other) const +{ + return !(*this == other); +} + +ErrorObject ErrorObject::copy() const +{ + return *this; +} +``` + +- Пример использования в коде: + +```C +#include "error_object.h" +//... +ErrorObject error(1, 404, "Resource not found"); +//... какие-то действия +ErrorObject otherError = error; // здесь данные не копируются, увеличивается счетчик ссылок +qDebug() << "Error code:" << otherError.code(); +otherError.setCode(200); // здесь происходит копирование данных, затем изменение в копии +``` + +Для возможности использования типа в метасистеме Qt +добавлено объявление типа в `.h` файле: + +```C +Q_DECLARE_METATYPE(ErrorObject) +``` + +и регистрация типа (должна вызываться один раз до использования в метасистеме): + +```C +qRegisterMetaType(); +``` + +После регистрации тип `ErrorObject` можно использовать для передачи в сигналах и +для конвертации в/из `QVariant`. + +
+ +--- + +
+ +- [К списку документов](Readme.md) + +
+ +
+ diff --git a/QtCodeStyle.md b/QtCodeStyle.md new file mode 100644 index 0000000..ff95db8 --- /dev/null +++ b/QtCodeStyle.md @@ -0,0 +1,577 @@ +![picture](/_resources/images/progcat.png) + +- [К списку документов](Readme.md) + +# Qt Code Style - Правила кодирования с использованием Qt C++ + +Ниже представлен обзор соглашений по написанию кода с использованием Qt. +При использовании Qt предпочтительно использовать стиль кодирования, +который используется в библиотеке, чтобы добиться единообразия кода. + +### Содержание + +- [Кодировка](#кодировка) +- [Заголовочные файлы](#заголовочные-файлы) +- [Директивы препроцессора](#директивы-препроцессора) +- [Отступы](#отступы) +- [Объявление переменных, функций и классов](#объявление-переменных-функций-и-классов) +- [Пробелы](#пробелы) +- [Фигурные скобки](#фигурные-скобки) +- [Круглые скобки](#круглые-скобки) +- [Использование конструкции switch](#использование-конструкции-switch) +- [Разрыв строк](#разрыв-строк) +- [Использование исключений](#использование-исключений) +- [Наследование и ключевое слово virtual](#наследование-и-ключевое-слово-virtual) +- [Неявные преобразования](#неявные-преобразования) +- [Числа с плавающей запятой](#числа-с-плавающей-запятой) +- [Преинкремент и предекремент](#преинкремент-и-предекремент) +- [Другие очевидные вещи](#другие-очевидные-вещи) +- [Общее исключение](#общее-исключение) + +
+ +## Кодировка + +Единственной кодировкой должна быть UTF-8, а использование других следует +приравнять к разжиганию межнациональной розни и карать соответствующей статьёй УК. + +
+ +[наверх](#содержание) + +
+ +## Заголовочные файлы + +При включении заголовочных файлов Qt, всегда используйте следующую форму +записи: + +```C +#include +``` + +Префикс библиотеки (`QtCore`, `QtWidgets` и т.д.) необходим для фреймворков Mac OS X, +а также очень целесообразен для не qmake проектов. + +
+ +Все заголовочные файлы должны быть с защитой от повторного включения посредством `#pragma once` или `#define`. +Применение `#pragma once` вместо `#define` увеличит скорость компиляции во многих случаях +благодаря высокоуровневому механизму; компилятор может самостоятельно сравнивать имена файлов +или inode'ы без необходимости вызова препроцессора для проверки заголовка на наличие `#ifndef` и `#endif`. +Можно использовать обе команды, `#pragma once` и `#define`, для написания переносимого кода, +что также может принести выгоду от применения `#pragma once` при оптимизации (если компилятор её поддерживает): + +```C +#pragma once +#ifndef FOO_BAR_BAZ_H_ +#define FOO_BAR_BAZ_H_ + +//... + +#endif // FOO_BAR_BAZ_H_ +``` + +- Все заголовочные файлы должны быть самодостаточными в плане компиляции. +Пользователи и инструменты разработки не должны зависеть от специальных зависимостей +при использовании заголовочного файла. + +- Подключайте только действительно используемые заголовочные файлы. Не надо заранее +подключать кучу `.h` файлов "на всякий случай". + +- Никогда не пишите реализацию методов класса или функций в заголовочном файле! + +- Вставляйте заголовочные файлы в следующем порядке: парный файл (например, foo.h — foo.cpp), +файлы библиотеки Qt, стандартная библиотека C++, другие библиотеки, файлы вашего проекта. + +- Все заголовочные файлы проекта должны указываться относительно директории исходных файлов проекта +без использования таких псевдонимов как . (текущая директория) или .. (родительская директория). +Директории поиска общих заголовочных файлов можно задать в файле проекта. + +
+ +[наверх](#содержание) + +
+ +## Директивы препроцессора + +Символ решетки всегда в начале строки, а имя директивы с отступом. + +```C +# if defined(QT_NO_KEYWORDS) +# define QT_NO_EMIT +# else +# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS +# define slots Q_SLOTS +# define signals Q_SIGNALS +# endif +# endif +``` + +
+ +[наверх](#содержание) + +
+ +## Отступы + +- Для обозначения отступа используйте 4 пробела подряд. +- Используйте пробелы, а не табуляцию! + +
+ +[наверх](#содержание) + +
+ +## Объявление переменных, функций и классов + +Один из самых важных постулатов, так как определяет читабельность и общий стиль кода. +Правила объявления переменных собраны в такой список: + +- Объявляйте по одной переменной в строке. +- Избегайте, если это возможно, коротких и запутанных названий переменных +(Например: "a", "rbarr", "nughdeget"). +- Односимвольные имена переменных подходят только для итераторов циклов, +небольшого локального контекста и временных переменных. В остальных случаях +имя переменной должно отражать ее назначение. +- Заводите переменные только по мере необходимости. + +```C +// Неправильно: +int a, b; +char *c, *d; + +// Правильно: +int height; +int width; +char *nameOfThis; +char *nameOfThat; +``` + +- Не используйте глобальные переменные. Вместо них рекомендуется использовать +локальные переменные и передавать их через параметры функций. + +- Функции и переменные должны именоваться со строчной буквы. +Каждое последующие слово в имени переменной должно начинаться с прописной буквы. +- Избегайте аббревиатур. + +```C +// Неправильно +short Cntr; +char ITEM_DELIM = ' '; + +// Правильно +short counter; +char itemDelimiter = ' '; +``` + +- Имена классов всегда начинаются с заглавной буквы. +- Сокращения в camel case (правильно: `QXmlStreamReader`, не правильно: `QXMLStreamReader`). + +
+ +Размещайте свой код в пространстве имён (за некоторыми исключениями). +Пространство имён должно иметь уникальное имя, обычно формируемое на основе названия проекта, +и, возможно, пути. +Не используйте директиву `using` (например, `using namespace foo`). +Не используйте встроенные (`inline`) пространства имён. +Пространства имён делят глобальную область видимости на отдельные именованные области, +позволяя избежать совпадения (коллизий) имён. + +
+ +[наверх](#содержание) + +
+ +## Пробелы + +Пробелы — очень важный элемент форматирования исходного кода. +Он отыгрывает очень большую роль в читабельности кода. + +- Используйте пустые строки для логической группировки операторов, где это возможно. +- Всегда используйте одну пустую строку в качестве разделителя +- Всегда используйте один пробел перед фигурной скобкой + +```C +// Неправильно: +if(foo){ +} + +// Правильно: +if (foo) { +} +``` + +- Всегда ставьте один пробел после `'*'` или `'&'`, если они стоят перед описанием типов. +Но никогда не ставьте пробелы между `'*'` или `'&'` и именем переменной. + +```C +char *x; +const QString &myString; +const char * const y = "hello"; +``` + +- Не окружайте пробелами функции доступа `.` и `->`. +- Бинарные операции отделяются пробелами с двух сторон. +- После преобразования типов не ставьте пробелов. +- Избегайте преобразования типов в стиле C. + +```C +// Неправильно +char* blockOfMemory = (char* ) malloc(data.size()); + +// Правильно +char *blockOfMemory = reinterpret_cast(malloc(data.size())); +``` + +- Не используйте несколько операторов на одной строке +- По возможности, используйте новую строку для тела оператора ветвления: + +```C +// Неправильно: +if (foo) bar(); + +// Правильно: +if (foo) + bar(); +``` + +- Содержимое в пространстве имён пишется без отступа. +- Никогда не добавляйте пробелы в конец строки. + +
+ +[наверх](#содержание) + +
+ +## Фигурные скобки + +Скобки — это вообще отдельная тема. Они, как и пробелы, отыгрывают львиную долю +во внешнем виде и читабельности кода. + +- Возьмите за основу расстановку открывающих фигурных скобок на одной строке +с выражением, которому они предшествуют. +- Исключение: Тело функции и описание класса всегда открывается фигурной скобкой, +стоящей на новой строке. +- Используйте фигурные скобки в условиях, если тело условия в размере превышает одну линию, +или тело условия достаточное сложное и выделение скобками действительно необходимо. +- Исключение 1: Используйте скобки, если родительское выражение состоит +из нескольких строк / оберток. +- Исключение 2: Используйте фигурные скобки, когда тела ветвлений `if-then-else` +занимают несколько строчек. +- Используйте фигурные скобки для обозначения пустого тела условия. + +```C +// Неправильно: +if (codec) +{ + // do something +} + +// Правильно: +if (codec) { + // do something +} + +// Неправильно: +if (address.isEmpty() || !isValid() + || !codec) + return false; + +// Правильно: +if (address.isEmpty() || !isValid() + || !codec) { + return false; +} +``` + +
+ +[наверх](#содержание) + +
+ +## Круглые скобки + +- Используйте круглые скобки для группировки выражений. + +```C +// Неправильно +if (a && b || c) +if (a + b & c) + +// Правильно +if ((a && b) || c) +if ((a + b) & c) +``` + +
+ +[наверх](#содержание) + +
+ +## Использование конструкции switch + +Безусловно, эти условия причина многих дискуссий со стороны разработчиков и создателей +Coding Guidelines — там может быть очень много различных вариантов. +Однако Qt предлагает именно такой вариант: + +- Операторы case должны быть в одном столбце со `switch`. +- Каждый оператор `case` должен иметь закрывающий `break` (или `return`) или комментарий, +которой предполагает намеренное отсутствие `break & return`. + +```C +switch (myEnum) { +case Value1: + doSomething(); + break; +case Value2: +case Value3: + doSomethingElse(); + // fall through +default: + defaultHandling(); + break; +} +``` + +
+ +[наверх](#содержание) + +
+ +## Разрыв строк + +Часто происходит следующее: есть разработчик Вася с большим монитором. +Он пишет себе код спокойно. Потом этот код открывает разработчик Петя, с ноутбуком, +и прозревает — ему приходится много скроллить чтобы прочитать весь код. +Это один из дефектов читабельности. Что же предлагает Qt для спасения? + +- Длина строки кода не должна превышать 100 символов (а лучше 80 - исторический стандарт). +Если надо – используйте разрыв строки. +- Запятые помещаются в конец разорванной линии; +операторы помещаются в начало новой строки. В зависимости от используемой вами IDE, +оператор на конце разорванной строки можно проглядеть. + +```C +// Неправильно: +if (longExpression + + otherLongExpression + + otherOtherLongExpression) { +} + +QMessageBox::information(d->someObjectWithLongName, tr("A long title for mesage"), tr("A very very very very very very long body"), QMessageBox::Ok, QMessageBox::Cancel); + +// Правильно: +if (longExpression + + otherLongExpression + + otherOtherLongExpression) { +} + +QMessageBox::information(d->someObjectWithLongName, + tr("A long title for mesage"), + tr("A very very very very very very long body"), + QMessageBox::Ok, QMessageBox::Cancel); +``` + +
+ +[наверх](#содержание) + +
+ +## Использование исключений + +В Qt исключения (`throw `) не используются. Вместо них применяются коды ошибок. + +
+ +[наверх](#содержание) + +
+ +## Наследование и ключевое слово virtual + +В этом постулате все предельно просто — главное не писать `virtual` +перед названием переопределяемого метода в `.h` файле. + +```C +// Неправильно: +class MyWidget : public QWidget +{ +... +protected: + virtual void keyPressEvent(QKeyEvent *); + +// Правильно: +class MyWidget : public QWidget +{ +... +protected: + void keyPressEvent(QKeyEvent *) override; +``` + +
+ +[наверх](#содержание) + +
+ +## Неявные преобразования + +Не объявляйте неявные преобразования. Используйте ключевое слово `explicit` +для операторов преобразования типа и конструкторов с одним аргументом. +Исключение: конструкторы копирования и перемещения могут объявляться без `explicit`, +т.к. они не выполняют преобразование типов. + +
+ +[наверх](#содержание) + +
+ +## Числа с плавающей запятой + +Числа с плавающей запятой всегда должны быть с десятичной точкой и числами +по обе стороны от неё (даже в случае экспоненциальной нотации). + +```C +// Неправильно: +float f = 1.f; +long double ld = -.5L; +double d = 1248e6; + +// Правильно: +float floatValue = 1.0f; +float floatVariable = 1.0; // OK +double doubleValue = 1248.0e6; +``` + +
+ +[наверх](#содержание) + +
+ +## Преинкремент и предекремент + +Используйте префиксные формы (`++i`) инкремента и декремента; +постфиксную форму используйте только при явной необходимости. +Когда переменная инкрементируется (`++i`, `i++`) или декрементируется +(`--i`, `i--`), а возвращаемое значение не используется, то необходимо +чётко понимать: использовать префиксную форму (`++i`, `--i`) или постфиксную +(`i++`, `i--`). + +
+ +Префиксную форму обычно легче читать, и она часто более эффективна +(как минимум такая же), т.к. не требуется создавать копию значения +до выполнения операции. + +```C +// Неправильно: +for (int i = 0; i < size; i++) { + +// Правильно: +for (int i = 0; i < size; ++i) { +``` + +
+ +[наверх](#содержание) + +
+ +## Другие очевидные вещи + +Еще некоторые правила, которые всегда должны выполняться, их все знают, +но повторим на всякий случай: + +- Не используйте `goto` и другие устаревшие конструкции, +которые нарушают принципы стандарта программирования. +- По возможности не используйте в проектах `qmake`, старайтесь новые проекты +строить с использованием `cmake` актуальной версии. +- Всегда включайте в свои файлы проектов расширренную проверку на ошибки. +Для компилятора `gcc` (`mingw`) это делается добавлением строчки в `CMakeList.txt`: + +```CMake +target_compile_options(${PROJECT_NAME} PRIVATE -Werror -Wall -Wextra -Wpedantic) +``` + +- Также можно выключать устаревшие конструкции языка. Пример для выключения `foreach`: + +```CMake +target_compile_definitions(${PROJECT_NAME} PRIVATE QT_NO_FOREACH) +``` + +- Пользуйтесь системой управления версиями. + +- Пишите по возможности кроссплатформенный код (как минимум поддерживаемый Windows и Linux). Используйте условную компиляцию для кода, специфичного для определенной ОС: + +```C +# if defined (Q_OS_WINDOWS) + // код для Windows +# else + // код для Linux, MacOS +# endif +``` + +- Для указателей (адресов) используйте `nullptr`, это улучшает +безопасность типов. Используйте `'\0'` в качестве символа конца строки +(пустого символа). Это улучшает читабельность кода. + +- Рекомендуется использовать `sizeof(переменная)` вместо `sizeof(тип)`. + +- Не вставляйте бесполезные комментарии в код. +Ваш код должен быть самодокументируемым. Комментарии можно использовать +для отдельных пояснений неочевидных или специфических вещей: + +```C +// Плохо: +int counter; // - счетчик шагов + +// Хорошо: +int stepCounter {0}; +``` + + +
+ +[наверх](#содержание) + +
+ +## Общее исключение + +Этот постулат гласит нам, что нет ничего плохого если вы нарушите какое-то правило, +но только в том случае, если оно делает ваш код уродливым. +Это хороший пример того, что у всех правил есть исключения, и того, +что правила созданы чтобы их нарушать. + +
+ +К сожалению, я не смог найти примера, когда `Qt Coding Guidelines` делают код — уродливым. + +
+ +[наверх](#содержание) + +
+ +--- + +
+ +- [К списку документов](Readme.md) + +
+ +
+ diff --git a/QtCreator.md b/QtCreator.md new file mode 100644 index 0000000..88bf34f --- /dev/null +++ b/QtCreator.md @@ -0,0 +1,61 @@ +![picture](/_resources/images/qtcat.png) + +- [К списку документов](Readme.md) + +# Qt Creator + +## Горячие клавиши для Qt Creator + +Горячие клавиши для Qt Creator, которые значительно упростят жизнь + + +- `Esc` - Выполняет переход к редактированию кода. +Несколько последовательных нажатий этой клавиши переключают пользователя в режим +редактирования, закрывают панели вывода справки, отладки. + +- `F4` - Переключает редактор между файлом реализации (`.сpp`) и соответствующим +заголовочным файлом (`.h`), которые содержат объявления интерфейса и +реализации класса соответственно. + +- `F2` - Выполняет переход к месту объявления переменной, функции, класса, +на имени которых стоял курсор при нажатии. + +- `F1` - Показывает справку для класса или метода Qt, на имени которого стоит курсор. + +- `Ctrl + Shift + R` - Переименование переменной, метода, класса, на имени +которых стоит курсор. Имя будет изменено во всех местах, где встречается +его использование: не только в текущем файле, но и в других файлах проекта. +При замене имени будет учитываться область видимости имени, поэтому замена +произойдёт только в местах обращения к имени. Именно этим это действие отличается +от обычного поиска и замены текста. + +- `Ctrl + Shift + U` - Поиск всех мест обращения к переменной, методу, +классу на имени которого стоит курсор. + +- `Ctrl + K` - Открывает поле быстрого поиска (Locator). + +- `Alt + Enter` - Позволяет открыть доступные дополнительные действия для +переменной, метода, класса, оператора в позиции курсора. +Это дополнительные действия для рефакторинга (реорганизации и улучшения +существующего кода) могут содержать изменение порядка параметров, +изменения в текущем фрагменте кода, добавление фрагментов кода и т.д. + +- `Ctrl + Space` - Вызывает выпадающий список автозавершения кода. + +- `Ctrl + F` - Поиск текста в текущем открытом файле. + +- `Ctrl + Shift + F` - Расширенный поиск текста в файле, проекте или группе +проектов (доступны дополнительные настройки). + +
+ +--- + +
+ +- [К списку документов](Readme.md) + +
+ +
+ diff --git a/QtThreads.md b/QtThreads.md new file mode 100644 index 0000000..d957ed9 --- /dev/null +++ b/QtThreads.md @@ -0,0 +1,253 @@ +![picture](/_resources/images/qtcat.png) + +- [К списку документов](Readme.md) + +# QThread - что нужно знать о потоках + +## Основы + +В Qt любые объекты способные работать с сигналами и слотами являются +наследниками класса `QObject`. +Каждый `QObject` строго привязан к какому-то потоку `QThread` который, +собственно, и занимается обслуживанием слотов и прочих событий данного объекта. +Один поток может обслуживать сразу множество `QObject` или вообще ни одного, +а вот `QObject` всегда имеет родительский поток и он всегда ровно один. +По сути можно считать что каждый `QThread` «владеет» каким-то набором `QObject`. +Внутри каждого `QThread` спрятана очередь сообщений адресованных +к объектам которыми данный `QThread` «владеет». +В модели Qt предполагается что если мы хотим чтобы `QObject` сделал +какое-либо действие, то мы «посылаем» данному `QObject` сообщение `QEvent`. +В этом потоково-безопасном вызове Qt находит `QThread` которому принадлежит +объект receiver, записывает `QEvent` в очередь сообщений этого потока и при +необходимости «будит» этот поток. При этом ожидается что код работающий в +данном `QThread` в какой-то момент после этого прочитает сообщение из +очереди и выполнит соответствующее действие. Чтобы это действительно произошло, +код в `QThread` должен войти в цикл обработки событий `QEventLoop`, +создав соответствующий объект и позвав у него либо метод `exec()`, +либо метод `processEvents()`. Первый вариант входит в бесконечный цикл +обработки сообщений (до получения `QEventLoop` события `quit()` ), +второй ограничивается тем что обрабатывает сообщения ранее накопившиеся в очереди. + +
+ +Итак, как мы уже разобрались, каждый объект в Qt «принадлежит» какому-то потоку. +При этом встает закономерный вопрос: а какому, собственно говоря, именно? +В Qt приняты следующие соглашения: + +- Все «дети» любого «родителя» всегда живут в том же потоке что и +родительский объект. Например попытка сделать `setParent` к объекту живущему +в другом потоке в Qt просто молча фейлится (в консоль пишется предупреждение). + +- Объект у которого при создании не указан родитель живет в потоке +который его создал. + +- При необходимости поток можно менять вызовом `QObject::moveToThread` (переместить объект в поток). +Перемещать можно только верхнеуровневых «родителей» (у которых `parent == null`), +попытка переместить любого «ребенка» будет молча проигнорирована. + +- При перемещении верхнеуровневого «родителя» все его «дети» тоже переедут +в новый поток. + +- Получить «текущий» поток исполнения можно через вызов +функции `QThread::currentThread()`, поток с которым ассоциирован объект — через +вызов `QObject::thread()`. + +- Все GUI-объекты кроме rendering back-end должны жить в GUI-потоке. + +- GUI-потоком является тот в котором был создан объект `QApplication`. + +## Таймеры в потоках + +Таймеры `QTimer` в потоках имеют ряд особенностей, которые нужно учитывать +при проектировании многопоточных приложений на Qt: + +- `QTimer` работает только в потоке с event loop (циклом обработки событий). +Это значит, что если вы хотите использовать `QTimer` в `QThread`, то в этом потоке должен быть запущен `QEventLoop`. +Если нет цикла событий — таймер просто не сработает. + +- QTimer должен быть создан в том потоке, в котором будет работать. +Таймер "привязан" к потоку через QObject::thread(). +Если вы создадите таймер в основном потоке, а потом попытаетесь использовать +его в другом — это будет ошибка. + +- Если объект с таймером перемещается в другой поток через `moveToThread()`, +таймер должен быть создан после перемещения. Иначе он останется привязанным к исходному потоку. + +## Правильная работа с потоками в Qt + +Для правильной работы вашего кода в параллельном потоке используйте следующие правила: + +- Проектируется отдельный класс (worker), потомок QObject, который будет работать в потоке. +- У этого объекта должны быть определены публичные слоты для запуска и остановки +основной работы, например: `void start();` и `void stop();`. +- Также у объекта должны быть определены сигналы для оповещения после начала +и после полного окончания работы, +например `void started();` и `void finished();`. +- Создание внутренних объектов и таймеров должны выполняться только +в слоте `start()` или позже (не в конструкторе). +- Обмен данными с объектом должен осуществляться только через механизм сигнал-слот. +Вызов методов напрямую после помещения объекта в поток запрещен! +- Далее в основном потоке программы создаётся экземпляр объекта worker (без родителя), +создаётся оъект `QThread`, и worker перемещвется в поток через `moveToThread()`. +После этого создаются связи сигнал-слот и запускается поток на выполнение. + +
+ +Пример класса `Worker`. Заголовочный файл `worker.h`: + +```C +#pragma once +#ifndef WORKER_H_ +#define WORKER_H_ +#include +#include + +class Worker: public QObject +{ + Q_OBJECT +public: + explicit Worker(QObject *parent = nullptr); + virtual ~Worker(); +signals: + void started(); + void finished(); + // ... другие сигналы наружу +public slots: + void start(); + void stop(); + // ...другие слоты для наружи +private: + QTimer *m_timer {nullptr}; + // ... +private slots: + void timerTimeOut(); + // ... +}; +#endif // WORKER_H_ +``` + +Файл с реализацией `worker.cpp`: + +```C +#include "worker.h" + +Worker::Worker(QObject *parent) : QObject{parent} +{ + // конструктор выполняется еще в основном потоке! +} + +Worker::~Worker() +{ + // К моменту вызова деструктора поток уже должен быть остановлен! + // но проверить стоит: + stop(); +} + +void Worker::start() +{ + // К этому моменту мы уже в параллельном потоке + + if (m_timer) { // если таймер уже есть, значит это повторный вызов + + return; + } + + m_timer = new QTimer(this); + connect(m_timer, &QTimer::timeout, this, &Worker::timerTimeOut); + // ... другие действия, например настройки и запуск таймера + m_timer->start(1000); + + emit started(); // оповещение, что мы стартанули +} + +void Worker::stop() +{ + // Тут мы еще в параллельном потоке + + if (!m_timer) { // если таймера нет, значит это повторный вызов + + return; + } + + m_timer->stop(); + delete m_timer; + m_timer = nullptr; + + // ... тут остановка всей работы, удаление объектов и т.п. + + emit finished(); // оповещение, что мы остановились +} + +void Worker::timerTimeOut() +{ + // Обработчик таймера срабатывает уже в параллельном потоке + // ... +} + +``` + +Как применить из основного потока, например слот клика по кнопке: + +```C +#include "worker.h" +#include +// ... + +void MainWindow::pushButtonClicked() +{ + Worker *worker = new Worker(); // без родителя + QThread *thread = new QThread(this); + + worker->moveToThread(thread); + + // Объект начнёт работу после запуска потока: + connect(thread, &QThread::started, worker, &Worker::start); + + // Какой-нибудь сигнал для остановки потока: + connect(this, &MainWindow::stopThread, worker, &Worker::stop); + + // Когда объект закончит работу, можно останавливать поток: + connect(worker, &Worker::finished, thread, &QThread::quit); + + // Когда поток завершится, можно удалить объект и класс потока: + connect(thread, &QThread::finished, worker, &Worker::deleteLater); + connect(thread, &QThread::finished, thread, &Worker::deleteLater); + + // ... тут другие нужные сигналы-слоты + + // Запуск потока: + thread->start(); +} + +// когда поток больше не нужен, вызываем emit stopThread(); + +``` + +Обратите внимание, в примере выше все действия по созданию и запуску потока находятся +в одном слоте и после выхода из слота доступны только через сигналы. +Нет защиты от повторного запуска - т.е. сколько раз нажали кнопку, столько потоков и создаётся, +а остановка всех по сигналу `stopThread()`. + +
+ +Для отслеживания количества нужно добавить счетчик запуска или флаг, например. +И при закрытии вашего приложения нужно обязательно дождаться завершения всех +созданных потоков! +Но это уже на вашей совести. + +
+ +*p.s. Код не проверял и писал по памяти. Возможны очепятки.* + +
+ +--- + +
+ +- [К списку документов](Readme.md) + +
+ +
+ diff --git a/README.md b/README.md index 4200859..017269f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ -# Qt_Code_Style +![picture](/_resources/images/qtcat.png) + +# Сборник полезностей по Qt и C++ + +- [Qt Code Style](QtCodeStyle.md) - Правила кодирования с использованием Qt +- [Qt Creator](QtCreator.md) - полезности +- [Implicit Shared в Qt](ImplicitShared.md) - механизм управления копированием данных +- [QThread - что нужно знать о потоках](QtThreads.md) - пример работы с потоками + +
+ +--- + +
-Сборник полезностей Qt \ No newline at end of file diff --git a/_resources/images/progcat.png b/_resources/images/progcat.png new file mode 100644 index 0000000000000000000000000000000000000000..eca87ce2c23da1f16205758a6c4e71762500ce79 GIT binary patch literal 68062 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 EAKA(ROaK4? literal 0 HcmV?d00001 diff --git a/_resources/images/qtcat.png b/_resources/images/qtcat.png new file mode 100644 index 0000000000000000000000000000000000000000..721ff2a0e6bfc970d1d7174f7d08dccec52db27b GIT binary patch literal 57321 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 +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#include "error_object.h" +#include + +namespace nayk { //============================================================= + +//============================================================================== +class ErrorObjectData : public QSharedData +{ +public: + int module {-1}; + int code {-1}; + QString text; + QDateTime dateTime {QDateTime::currentDateTime()}; +}; +//============================================================================== +void regiserErrorObjectMetaType() +{ + if ( !QMetaType::isRegistered( qMetaTypeId() ) ) { + + qRegisterMetaType(); + } +} +//============================================================================== +ErrorObject::ErrorObject() + : d(new ErrorObjectData) +{ + regiserErrorObjectMetaType(); +} +//============================================================================== +ErrorObject::ErrorObject(int module, int code, const QString &text, const QDateTime &dateTime) + : d(new ErrorObjectData) +{ + regiserErrorObjectMetaType(); + + d->module = module; + d->code = code; + d->text = text; + d->dateTime = dateTime; +} +//============================================================================== +ErrorObject::ErrorObject(const ErrorObject &other) = default; +//============================================================================== +ErrorObject &ErrorObject::operator=(const ErrorObject &other) = default; +//============================================================================== +ErrorObject::~ErrorObject() = default; +//============================================================================== +int ErrorObject::module() const +{ + return d->module; +} +//============================================================================== +void ErrorObject::setModule(int module) +{ + d->module = module; +} +//============================================================================== +int ErrorObject::code() const +{ + return d->code; +} +//============================================================================== +void ErrorObject::setCode(int code) +{ + d->code = code; +} +//============================================================================== +QString ErrorObject::text() const +{ + return d->text; +} +//============================================================================== +void ErrorObject::setText(const QString &text) +{ + d->text = text; +} +//============================================================================== +QDateTime ErrorObject::dateTime() const +{ + return d->dateTime; +} +//============================================================================== +void ErrorObject::setDateTime(const QDateTime &dateTime) +{ + d->dateTime = dateTime; +} +//============================================================================== +bool ErrorObject::isValid() const +{ + return (d->module >= 0) && ((d->code >= 0) || !d->text.isEmpty()); +} +//============================================================================== +bool ErrorObject::operator==(const ErrorObject &other) const +{ + return (d->module == other.d->module) && + (d->dateTime == other.d->dateTime) && + ( + ((d->code == other.d->code) && (d->code >= 0)) + || + ((d->code < 0) && (other.d->code < 0) && (d->text == other.text())) + ); +} +//============================================================================== +bool ErrorObject::operator!=(const ErrorObject &other) const +{ + return !(*this == other); +} +//============================================================================== +ErrorObject ErrorObject::copy() const +{ + return *this; +} +//============================================================================== + +} // namespace nayk //========================================================== diff --git a/examples/error_object.h b/examples/error_object.h new file mode 100644 index 0000000..4c0b398 --- /dev/null +++ b/examples/error_object.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** Copyright (c) 2025 Evgeny Teterin (nayk) +** All right reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +****************************************************************************/ +#pragma once +#ifndef NAYK_ERROR_OBJECT_H +#define NAYK_ERROR_OBJECT_H + +#if defined (LIB_NAYK_CORE) +# define ERROR_OBJECT_EXPORT Q_DECL_EXPORT +#else +# define ERROR_OBJECT_EXPORT Q_DECL_IMPORT +#endif + +#include +#include +#include +#include + +namespace nayk { //============================================================= + +class ErrorObjectData; + +class ERROR_OBJECT_EXPORT ErrorObject +{ +public: + ErrorObject(); + ErrorObject(int module, int code, const QString &text, const QDateTime &dateTime = QDateTime::currentDateTime()); + ErrorObject(const ErrorObject &other); + ErrorObject &operator=(const ErrorObject &other); + ~ErrorObject(); + int module() const; + void setModule(int module); + int code() const; + void setCode(int code); + QString text() const; + void setText(const QString &text); + QDateTime dateTime() const; + void setDateTime(const QDateTime &dateTime); + bool isValid() const; + bool operator==(const ErrorObject &other) const; + bool operator!=(const ErrorObject &other) const; + ErrorObject copy() const; + +private: + QSharedDataPointer d; +}; + +} // namespace nayk //========================================================== + +Q_DECLARE_METATYPE(nayk::ErrorObject) + +#endif // NAYK_ERROR_OBJECT_H