Класс 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.1/qextensionfactory.html