Spec-Zone.ru › Qt 5.9

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API