Класс QExtensionFactory
Класс QExtensionFactory позволяет создавать фабрику, способную создавать экземпляры пользовательских расширений в Qt Designer. Подробнее...
| Заголовок: | #include <QExtensionFactory> |
| CMake: | find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake: | QT += designer |
| Наследует: | QObject и QAbstractExtensionFactory |
Открытые функции
| QExtensionFactory(QExtensionManager *parent = nullptr) | |
| QExtensionManager * | extensionManager() const |
Переопределённые открытые функции
| virtual QObject * | extension(QObject *object, const QString &iid) const override |
Защищённые функции
| virtual QObject * | createExtension(QObject *object, const QString &iid, QObject *parent) const |
Подробное описание
В Qt Designer расширения создаются только по мере необходимости. Поэтому при реализации пользовательского расширения необходимо также создать QExtensionFactory, т.е. класс, способный создавать экземпляр вашего расширения, и зарегистрировать его с помощью менеджера расширений Qt Designer.
Класс QExtensionManager предоставляет средства управления расширениями для Qt Designer. При необходимости расширения менеджер расширений Qt Designer выполнит проход по всем зарегистрированным фабрикам, вызывая QExtensionFactory::createExtension() для каждой, пока не найдёт первую, способную создать требуемое расширение для выбранного объекта. Эта фабрика создаст экземпляр расширения.
В Qt Designer доступны четыре типа расширений: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension и QDesignerTaskMenuExtension. Поведение Qt Designer одинаково, независимо от того, связано ли запрошенное расширение с контейнером с несколькими страницами, листом членов, листом свойств или контекстным меню.
Вы можете либо создать новый QExtensionFactory и переопределить функцию QExtensionFactory::createExtension(). Например:
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerContainerExtension))
return 0;
if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
(object))
return new MyContainerExtension(widget, parent);
return 0;
} Или вы можете использовать существующую фабрику, расширяя функцию QExtensionFactory::createExtension(), чтобы сделать её способной создавать и ваше расширение. Например:
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
return new MyContainerExtension(widget, parent);
} else {
return 0;
}
} Полный пример использования класса QExtensionFactory см. в примере расширения контекстного меню. Пример показывает, как создать пользовательский плагин виджета для Qt Designer и как использовать класс QDesignerTaskMenuExtension для добавления пользовательских элементов в контекстное меню Qt Designer.
См. также QExtensionManager и QAbstractExtensionFactory.
Документация по функциям-членам
QExtensionFactory::QExtensionFactory(QExtensionManager *parent = nullptr)
Конструктор фабрики расширений с заданным parent.
[virtual protected] QObject *QExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const
Создаёт расширение, заданное iid, для заданного object. Объект расширения создаётся как дочерний элемент указанного parent.
См. также extension().
[override virtual] QObject *QExtensionFactory::extension(QObject *object, const QString &iid) const
Переопределяет: QAbstractExtensionFactory::extension(QObject *object, const QString &iid) const.
Возвращает расширение, заданное iid, для заданного object.
См. также createExtension().
QExtensionManager *QExtensionFactory::extensionManager() const
Возвращает менеджер расширений для фабрики расширений.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qextensionfactory.html