Класс QDesignerContainerExtension
Класс QDesignerContainerExtension позволяет добавлять страницы в пользовательский контейнер с несколькими страницами в рабочем пространстве Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerContainerExtension> |
| CMake: | find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake: | QT += designer |
Открытые функции
| virtual | ~QDesignerContainerExtension() |
| virtual void | addWidget(QWidget *page) = 0 |
| virtual bool | canAddWidget() const = 0 |
| virtual bool | canRemove(int index) const = 0 |
| virtual int | count() const = 0 |
| virtual int | currentIndex() const = 0 |
| virtual void | insertWidget(int index, QWidget *page) = 0 |
| virtual void | remove(int index) = 0 |
| virtual void | setCurrentIndex(int index) = 0 |
| virtual QWidget * | widget(int index) const = 0 |
Подробное описание
QDesignerContainerExtension предоставляет интерфейс для создания пользовательских расширений контейнеров. Расширение контейнера состоит из набора функций, необходимых Qt Designer для управления плагином контейнера с несколькими страницами, и списка страниц контейнера.
Предупреждение: Это не расширение для плагинов контейнеров вообще, только для пользовательских контейнеров с несколькими страницами.
Для создания расширения контейнера ваш класс расширения должен унаследовать как от QObject, так и от QDesignerContainerExtension. Например:
class MyContainerExtension : public QObject,
public QDesignerContainerExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerContainerExtension)
public:
MyContainerExtension(MyCustomWidget *widget,
QObject *parent = 0);
int count() const;
QWidget *widget(int index) const;
int currentIndex() const;
void setCurrentIndex(int index);
void addWidget(QWidget *widget);
void insertWidget(int index, QWidget *widget);
void remove(int index);
private:
MyCustomWidget *myWidget;
}; Поскольку мы реализуем интерфейс, мы должны убедиться, что он известен системе метаобъектов с помощью макроса Q_INTERFACES(). Это позволяет Qt Designer использовать функцию qobject_cast() для запроса поддерживаемых интерфейсов, используя только указатель QObject.
Вы должны переопределить несколько функций, чтобы позволить Qt Designer управлять пользовательским виджетом контейнера с несколькими страницами: Qt Designer использует count() для отслеживания количества страниц в вашем контейнере, widget() для возвращения страницы по заданному индексу в списке страниц контейнера и currentIndex() для возвращения индекса списка выбранной страницы. Qt Designer использует функцию addWidget() для добавления заданной страницы в контейнер, ожидая, что она будет добавлена в конец списка страниц, а функцию insertWidget() для добавления заданной страницы в контейнер, вставляя её по заданному индексу.
В Qt Designer расширения создаются только при необходимости. Поэтому вы также должны создать QExtensionFactory, т. е. класс, способный создать экземпляр вашего расширения, и зарегистрировать его с помощью менеджера расширений Qt Designer.
Когда требуется расширение контейнера, менеджер расширений Qt Designer перебирает все зарегистрированные фабрики, вызывая QExtensionFactory::createExtension() для каждой из них, пока не найдёт первую, способную создать расширение контейнера. Эта фабрика затем создаст расширение для плагина.
Существует четыре типа расширений в Qt Designer: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension и QDesignerTaskMenuExtension. Поведение Qt Designer одинаково, независимо от того, связано ли запрашиваемое расширение с контейнером с несколькими страницами, листом членов, листом свойств или меню задач.
Класс QExtensionFactory предоставляет стандартную фабрику расширений и также может использоваться как интерфейс для пользовательских фабрик расширений. Вы можете создать новую фабрику 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;
}
} Полный пример использования класса QDesignerContainerExtension см. в примере Расширения контейнера. Пример демонстрирует создание пользовательского плагина с несколькими страницами для Qt Designer.
См. также QExtensionFactory, QExtensionManager и Создание пользовательских расширений виджетов.
Документация по членам-функциям
[virtual] QDesignerContainerExtension::~QDesignerContainerExtension()
Уничтожает расширение.
[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)
Добавляет заданную page в контейнер, добавляя её в конец списка страниц расширения.
См. также insertWidget(), remove() и widget().
[pure virtual, since 5.0] bool QDesignerContainerExtension::canAddWidget() const
Возвращает, можно ли добавить виджет. Это определяет, включены ли опции контекстного меню для добавления или вставки страниц.
Для контейнеров с одной фиксированной страницей, например QScrollArea или QDockWidget, это должно возвращать false.
Функция была введена в Qt 5.0.
См. также addWidget() и canRemove().
[pure virtual, since 5.0] bool QDesignerContainerExtension::canRemove(int index) const
Возвращает, можно ли удалить виджет по заданному index. Это определяет, включена ли опция контекстного меню для удаления текущей страницы.
Для контейнеров с одной фиксированной страницей, например QScrollArea или QDockWidget, это должно возвращать false.
Функция была введена в Qt 5.0.
См. также remove() и canAddWidget().
[pure virtual] int QDesignerContainerExtension::count() const
Возвращает количество страниц в контейнере.
[pure virtual] int QDesignerContainerExtension::currentIndex() const
Возвращает индекс текущей выбранной страницы в контейнере.
См. также setCurrentIndex().
[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)
Добавляет заданную page в контейнер, вставив её по заданному index в список страниц расширения.
См. также addWidget(), remove() и widget().
[pure virtual] void QDesignerContainerExtension::remove(int index)
Удаляет страницу по заданному index из списка страниц расширения.
См. также addWidget() и insertWidget().
[pure virtual] void QDesignerContainerExtension::setCurrentIndex(int index)
Устанавливает текущую выбранную страницу в контейнере в страницу по заданному index в списке страниц расширения.
См. также currentIndex().
[pure virtual] QWidget *QDesignerContainerExtension::widget(int index) const
Возвращает страницу с заданным индексом в списке страниц расширения.
См. также addWidget() и insertWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qdesignercontainerextension.html