Skip to content

Latest commit

 

History

History
42 lines (41 loc) · 4.96 KB

qt.md

File metadata and controls

42 lines (41 loc) · 4.96 KB
  1. Оглавление
  2. Общее
    1. Приведение типов d Qt
    2. QVariant
    3. Макрос Q_OBJECT
    4. Класс QObject
    5. MOC compiler
  3. Многопоточность в qt/события, сигналы, слоты
    1. Event loop
    2. Delete later
    3. Сигналы/слоты
  4. Модели в qt
  5. QWidget
  6. QML
  • Общее:
    • Приведение типов в Qt:
      • qvariant_cast - приводит объект класса QVariant к нужному классу.
      • qobject_cast - аналог dinamic_cast, но без использования RTTI. Класс должен быть наследником QObject и содержать в себе макрос Q_OBJECT.
    • QVariant:
    • Макрос Q_OBJECT: Макрос, который раскрывается с помощью MOC компилятора, генерируя код позволяющий работать QT фичам.
    • Класс QObject: Хранит ссылку на объект и информацию о типе объекта? #TODO
    • MOC compiler:
  • Многопоточность в 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.
  • Модели в qt:
  • QWidget:
  • QML: