Spec-Zone.ru › Qt 6.0

Класс QDesignerContainerExtension

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

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

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

virtual ~QDesignerContainerExtension()
virtual void addWidget(QWidget *page) = 0
virtual bool canAddWidget() const = 0
virtual bool canRemove(int index) const = 0
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 для управления многостраничным контейнером-плагином, и списка страниц контейнера.

Предупреждение: Это не расширение для плагинов контейнеров вообще, только для пользовательских многостраничных контейнеров.

Для создания расширения контейнера ваш класс расширения должен наследоваться как от 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

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

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

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

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

[pure virtual, since 5.0] bool QDesignerContainerExtension::canRemove(int index) const

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

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

Эта функция была введена в 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.0/qdesignercontainerextension.html

Spec-Zone.ru

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