Класс 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/archives/qt-5.11/qdesignercontainerextension.html