Класс 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)
Добавляет заданную страницу в контейнер, добавляя её в конец списка страниц расширения.
См. также insertWidget(), remove() и widget().
[virtual] bool QDesignerContainerExtension::canAddWidget() const
Возвращает значение, указывающее, можно ли добавить виджет. Это определяет, включены ли пункты контекстного меню для добавления или вставки страниц.
Для контейнеров с единственной фиксированной страницей, например QScrollArea или QDockWidget, это должно возвращать false.
Функция была введена в Qt 5.0.
См. также addWidget() и canRemove().
[virtual] bool QDesignerContainerExtension::canRemove(int index) const
Возвращает значение, указывающее, можно ли удалить виджет по заданному индексу. Это определяет, включен ли пункт контекстного меню для удаления текущей страницы.
Для контейнеров с единственной фиксированной страницей, например 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)
Добавляет заданную страницу в контейнер, вставляя её по заданному индексу в список страниц расширения.
См. также addWidget(), remove() и widget().
[pure virtual] void QDesignerContainerExtension::remove(int index)
Удаляет страницу по заданному индексу из списка страниц расширения.
См. также addWidget() и insertWidget().
[pure virtual] void QDesignerContainerExtension::setCurrentIndex(int 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/archives/qt-5.6/qdesignercontainerextension.html