Класс QExtensionFactory
Класс QExtensionFactory позволяет создать фабрику, способную создавать экземпляры пользовательских расширений в Qt Designer. Подробнее...
| Заголовок: | #include <QExtensionFactory> |
| 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-5.15/qextensionfactory.html