Класс 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.
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
Возвращает страницу по заданному индексу в списке страниц расширения.
См. также addWidget() и insertWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qdesignercontainerextension.html