Spec-Zone.ru › Qt 5.9

Модель объектов

Стандартная модель объектов C++ предоставляет очень эффективную поддержку времени выполнения для парадигмы объектов. Однако её статическая природа является негибкой в определённых областях задач. Программирование графических пользовательских интерфейсов — это область, которая требует как эффективности во время выполнения, так и высокой гибкости. Qt обеспечивает это, объединяя скорость C++ с гибкостью модели объектов Qt.

Qt добавляет эти функции к C++:

  • очень мощный механизм бесшовной связи объектов, называемый сигналами и слотами
  • запрашиваемые и проектируемые свойства объектов
  • мощные события и фильтры событий
  • контекстуальный перевод строк для интернационализации
  • сложные управляемые интервалы таймеры, которые позволяют элегантно интегрировать множество задач в событийно-управляемом GUI
  • иерархические и запрашиваемые дерева объектов, которые организуют владение объектами естественным образом
  • защищённые указатели (QPointer), которые автоматически устанавливаются в 0 при уничтожении ссылаемого объекта, в отличие от обычных указателей C++, которые становятся висячими указателями, когда их объекты уничтожаются
  • динамический cast, работающий через границы библиотек.
  • поддержка создания пользовательских типов.

Многие из этих функций Qt реализованы с использованием стандартных техник C++, основанных на наследовании от QObject. Другие, такие как механизм связи объектов и динамическая система свойств, требуют системы метаобъектов, предоставляемой собственным компилятором метаобъектов (moc) Qt.

Система метаобъектов — это расширение C++, которое делает язык более подходящим для истинной компонентной разработки GUI.

Важные классы

Эти классы образуют основу модели объектов Qt.

QMetaClassInfo

Дополнительная информация о классе

QMetaEnum

Метаданные об перечислении

QMetaMethod

Метаданные о методе члена

QMetaProperty

Метаданные о свойстве

QMetaType

Управляет именованными типами в системе метаобъектов

QObject

Базовый класс всех объектов Qt

QSignalBlocker

Безопасный от исключений оболочка вокруг QObject::blockSignals()

QObjectCleanupHandler

Отслеживает жизненный цикл нескольких QObject

QMetaObject

Содержит метаинформацию об объектах Qt

QPointer

Шаблонный класс, который предоставляет защищённые указатели на QObject

QSignalMapper

Объединяет сигналы от идентифицируемых отправителей

QVariant

Действует как объединение для наиболее распространённых типов данных Qt

Объекты Qt: идентичность против значения

Некоторые из добавленных функций для модели объектов Qt требуют, чтобы мы рассматривали объекты Qt как идентичности, а не как значения. Значения копируются или присваиваются; идентичности клонируются. Клонирование означает создание новой идентичности, а не точной копии старой. Например, близнецы имеют разные идентичности. Они могут выглядеть одинаково, но у них разные имена, разные местоположения и могут иметь совершенно разные социальные сети.

Тогда клонирование идентичности — более сложная операция, чем копирование или присвоение значения. Мы можем увидеть, что это означает в модели объектов Qt.

Объект Qt...

  • может иметь уникальное QObject::objectName(). Если мы копируем объект Qt, какое имя мы должны дать копии?
  • имеет местоположение в иерархии объектов. Если мы копируем объект Qt, где должна находиться копия?
  • может быть подключен к другим объектам Qt, чтобы отправлять им сигналы или получать сигналы, отправляемые ими. Если мы копируем объект Qt, как мы должны передать эти подключения копии?
  • может иметь новые свойства, добавленные к нему во время выполнения, которые не объявлены в классе C++. Если мы копируем объект Qt, должна ли копия включать свойства, которые были добавлены к оригиналу?

По этим причинам объекты Qt следует рассматривать как идентичности, а не как значения. Идентичности клонируются, а не копируются или присваиваются, и клонирование идентичности — более сложная операция, чем копирование или присвоение значения. Поэтому QObject и все подклассы QObject (прямые или косвенные) имеют дизаблированный конструктор копирования и оператор присваивания.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/object.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API