Spec-Zone.ru › Qt 6.1

Класс QDesignerContainerExtension

Класс QDesignerContainerExtension позволяет добавлять страницы в пользовательский многостраничный контейнер в рабочей области Qt Designer. Подробнее...

Заголовок: #include <QDesignerContainerExtension>
CMake: find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
  • Список всех членов, включая унаследованные

Открытые функции

виртуальный ~QDesignerContainerExtension()
виртуальный void addWidget(QWidget *page) = 0
виртуальный bool canAddWidget() const = 0
виртуальный bool canRemove(int index) const = 0
виртуальный int count() const = 0
виртуальный int currentIndex() const = 0
виртуальный void insertWidget(int index, QWidget *page) = 0
виртуальный void remove(int index) = 0
виртуальный void setCurrentIndex(int index) = 0
виртуальный 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)

Добавляет заданную страницу в контейнер, добавляя её в конец списка страниц расширения.

См. также insertWidget(), remove() и widget().

[pure virtual, since 5.0] bool QDesignerContainerExtension::canAddWidget() const

Возвращает значение, указывающее, можно ли добавить виджет. Это определяет, включены ли опции контекстного меню для добавления или вставки страниц.

Для контейнеров с одной фиксированной страницей, например QScrollArea или QDockWidget, это должно возвращать false.

Функция была введена в Qt 5.0.

См. также addWidget() и canRemove().

[pure virtual, since 5.0] 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/qt-6.1/qdesignercontainerextension.html

Spec-Zone.ru

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