- Общее:
- Приведение типов в Qt:
- qvariant_cast - приводит объект класса QVariant к нужному классу.
- qobject_cast - аналог dinamic_cast, но без использования RTTI. Класс должен быть наследником QObject и содержать в себе макрос Q_OBJECT.
- QVariant:
- Макрос Q_OBJECT: Макрос, который раскрывается с помощью MOC компилятора, генерируя код позволяющий работать QT фичам.
- Класс QObject: Хранит ссылку на объект и информацию о типе объекта? #TODO
- MOC compiler:
- Приведение типов в Qt:
- Многопоточность в qt/события, сигналы, слоты: https://habr.com/ru/post/467261/
- QtConcurrent: #TODO
- QThread: это Qt обертка для потока конкретной ОС, которая позволяет взаимодействовать с потоком из Qt проекта, в первую очередь через Qt signals/slots.
- Неправильный способ, это отнаследоваться от QThread и переопределить метод run(), но добавлять туда какую-то бизнес логику - противоречит идее заложенной самими qt разработчиками. Прибегать к этому способу стоит только тогда, когда нужно кастомизировать стандартные потоки.
- Правильный способ работы с тредом, это реализовать класс в котором выполняется некая бизнес логика и сигналы/слоты для начала и конца работы этого класса, затем через moveToThread (метод QObject), переместить экземпляр класса в отдельный тред и связать его с методами started() и quit().
- Event loop: #TODO
- Delete later: #TODO
- Сигналы/слоты:
- 5 параметр функции connect:
- Auto Connection (default) - если источник сигнала и слот находятся в одном потоке, то поведение как у Direct Connection, если источник сигнала и слот находятся в разных потоках, то поведение как у Queued Connection.
- Direct Connection - слот вызывается немедленно при отправке сигнала. Слот выполняется в потоке отправителя, который не обязательно является потоком-получателем.
- Queued Connection - слот вызывается, когда управление возвращается в Event Loop в потоке получателя. Слот выполняется в потоке получателя.
- Blocking Queued Connection - слот вызывается так же, как и при соединении через очередь, за исключением того, что текущий поток блокируется до тех пор, пока слот не возвратит управление.
- Использование этого типа подключения объектов в одном потоке приведет к дедлоку
- Unique Connection - поведение такое же, что и при автоматическом соединении, но соединение устанавливается только если оно не дублирует уже существующее соединение. т.е., если тот же сигнал уже соединён с тем же самым слотом для той же пары объектов, то соединение не будет установлено и connect() вернет false.
- 5 параметр функции connect:
- Модели в qt:
- QWidget:
- QML: