Модель объектов
Стандартная модель объектов C++ предоставляет очень эффективную поддержку времени выполнения для парадигмы объектов. Однако её статическая природа является негибкой в определённых областях задач. Программирование графических пользовательских интерфейсов — это область, которая требует как эффективности во время выполнения, так и высокой гибкости. Qt обеспечивает это, объединяя скорость C++ с гибкостью модели объектов Qt.
Qt добавляет эти функции к C++:
- очень мощный механизм бесшовной связи объектов, называемый сигналами и слотами
- запрашиваемые и проектируемые свойства объектов
- мощные события и фильтры событий
- контекстуальный перевод строк для интернационализации
- сложные управляемые интервалы таймеры, которые позволяют элегантно интегрировать множество задач в событийно-управляемом GUI
- иерархические и запрашиваемые дерева объектов, которые организуют владение объектами естественным образом
- защищённые указатели (QPointer), которые автоматически устанавливаются в 0 при уничтожении ссылаемого объекта, в отличие от обычных указателей C++, которые становятся висячими указателями, когда их объекты уничтожаются
- динамический cast, работающий через границы библиотек.
- поддержка создания пользовательских типов.
Многие из этих функций Qt реализованы с использованием стандартных техник C++, основанных на наследовании от QObject. Другие, такие как механизм связи объектов и динамическая система свойств, требуют системы метаобъектов, предоставляемой собственным компилятором метаобъектов (moc) Qt.
Система метаобъектов — это расширение C++, которое делает язык более подходящим для истинной компонентной разработки GUI.
Важные классы
Эти классы образуют основу модели объектов Qt.
Дополнительная информация о классе |
|
Метаданные об перечислении |
|
Метаданные о методе члена |
|
Метаданные о свойстве |
|
Управляет именованными типами в системе метаобъектов |
|
Базовый класс всех объектов Qt |
|
Безопасный от исключений оболочка вокруг QObject::blockSignals() |
|
Отслеживает жизненный цикл нескольких QObject |
|
Содержит метаинформацию об объектах Qt |
|
Шаблонный класс, который предоставляет защищённые указатели на QObject |
|
Объединяет сигналы от идентифицируемых отправителей |
|
Действует как объединение для наиболее распространённых типов данных 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