Spec-Zone.ru › Qt 6.0

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

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

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

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

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

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

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

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

QMetaClassInfo

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

QMetaEnum

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

QMetaMethod

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

QMetaObject

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

QMetaProperty

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

QMetaSequence

Позволяет использовать тип, удаленный доступ к последовательным контейнерам

QMetaType

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

QObject

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

QObjectCleanupHandler

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

QPointer

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

QSignalBlocker

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

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/qt-6.2/object.html

Spec-Zone.ru

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