Объектная модель Qt
Объектная модель стандартного C++ предоставляет весьма эффективную поддержку объектной парадигмы во время исполнения. Но из-за ее статической природы она является негибкой в некоторых проблемных областях. Программирование графического интерфейса пользователя является областью, требующей как эффективности во время исполнения, так и высокого уровня гибкости. Qt предоставляет и то, и другое, объединяя скорость C++ и гибкость объектной модели Qt.
Qt добавляет к C++ следующие возможности:
- очень мощный механизм для непрерывного взаимодействия объектов, называемый сигналы и слоты
- свойства объектов, проектируемые и пригодные для использования в очередях
- мощные события и фильтры событий
- контекстный перевод строк для интернационализации
- изощренные управляемые интервалами таймеры, которые делают возможным элегантную интеграцию многих задач в графический интерфейс пользователя, управляемый событиями
- иерархические и пригодные для использования в очередях деревья объектов, организующие владение объектом естественным способом
- защищенные указатели (guarded pointers) (QPointer), автоматически устанавливаемые в 0 при уничтожении объекта, на который они ссылаются, в отличие от обычных указателей C++, которые становятся провисшими указателями (dangling pointers) после уничтожения объектов, на которые они ссылались
- динамическое приведение (dynamic cast), которое работает через границы библиотек.
Многие из этих возможностей Qt реализованы с помощью стандартных приемов C++, базирующихся на наследовании от QObject. Остальным, подобно механизму связи между объектами и системе динамических свойств, требуется Система мета-объектов, предоставляемая собственным Компилятором мета-объектов (moc) Qt.
Система мета-объектов - это расширение C++, делающее язык более пригодным для подлинного компонентного программирования графического интерфейса пользователя. Несмотря на то, что для расширения C++ можно использовать шаблоны, система мета-объектов предоставляет преимущества использования стандартного C++, чего нельзя добиться с помощью шаблонов; смотрите Почему в Qt не используются шаблоны в сигналах и слотах?
|