Класс QDesignerContainerExtension
Класс QDesignerContainerExtension позволяет добавлять страницы в пользовательский многостраничный контейнер в рабочем пространстве Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerContainerExtension> |
| qmake: | QT += designer |
Открытые функции
| virtual | ~QDesignerContainerExtension() |
| virtual void | addWidget(QWidget *page) = 0 |
| virtual bool | canAddWidget() const |
| virtual bool | canRemove(int index) const |
| 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().
[virtual] bool QDesignerContainerExtension::canAddWidget() const
Возвращает значение, определяющее, можно ли добавить виджет. Это определяет, будут ли включены пункты контекстного меню для добавления или вставки страниц.
Для контейнеров, имеющих единственную фиксированную страницу, например QScrollArea или QDockWidget, это значение должно быть false.
Функция была добавлена в Qt 5.0.
См. также addWidget() и canRemove().
[virtual] 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
Возвращает страницу по заданному index в списке страниц расширения.
См. также addWidget() и insertWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qdesignercontainerextension.html