QDesignerContainerExtension Class

QDesignerContainerExtension 클래스를 사용하면 Qt Widgets Designer 의 작업 공간에 있는 사용자 지정 다중 페이지 컨테이너에 페이지를 추가할 수 있습니다. 더 보기...

헤더: #include <QDesignerContainerExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
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 Widgets 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 Widgets Designer 에서 qobject_cast() 함수를 사용하여 QObject 포인터만 사용하여 지원되는 인터페이스를 쿼리할 수 있습니다.

Qt Widgets Designer Qt Widgets Designer 은 () 함수를 사용하여 컨테이너의 페이지 수를 추적하고, () 함수를 사용하여 컨테이너 페이지 목록에서 지정된 인덱스의 페이지를 반환하며, () 함수를 사용하여 선택한 페이지의 목록 인덱스를 반환하는 등 사용자 정의 다중 페이지 컨테이너 위젯을 관리하기 위해 여러 함수를 다시 구현해야 합니다. 는 () 함수를 사용하여 지정된 페이지를 컨테이너에 추가하여 페이지 목록에 추가될 것으로 예상하고, () 함수는 지정된 페이지를 지정된 인덱스에 삽입하여 컨테이너에 추가할 것으로 예상합니다. count widget currentIndex Qt Widgets Designer addWidget insertWidget

Qt Widgets Designer 에서 확장은 필요할 때까지 생성되지 않습니다. 따라서 QExtensionFactory, 즉 확장의 인스턴스를 만들 수 있는 클래스를 생성하고 Qt Widgets Designerextension manager 를 사용하여 등록해야 합니다.

컨테이너 확장이 필요한 경우 Qt Widgets Designerextension manager 은 컨테이너 확장을 생성할 수 있는 첫 번째 팩토리를 찾을 때까지 등록된 모든 팩토리를 각각 QExtensionFactory::createExtension()를 호출하여 실행합니다. 그러면 이 팩토리가 플러그인 확장을 생성합니다.

Qt Widgets Designer 에는 네 가지 유형의 확장을 사용할 수 있습니다: QDesignerContainerExtension , QDesignerMemberSheetExtension, QDesignerPropertySheetExtensionQDesignerTaskMenuExtension. Qt Widgets 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 Widgets Designer 에 대한 사용자 지정 다중 페이지 플러그인을 만드는 방법을 보여줍니다.

QExtensionFactory, QExtensionManager, 및 사용자 지정 위젯 확장 만들기도참조하세요 .

멤버 함수 문서

[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension()

확장자를 삭제합니다.

[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)

주어진 page 을 확장 프로그램의 페이지 목록에 추가하여 컨테이너에 추가합니다.

insertWidget(), remove(), widget()도 참조하세요 .

[pure virtual] bool QDesignerContainerExtension::canAddWidget() const

위젯을 추가할 수 있는지 여부를 반환합니다. 페이지 추가 또는 삽입을 위한 컨텍스트 메뉴 옵션이 활성화되어 있는지 여부가 결정됩니다.

단일 고정 페이지(예: QScrollArea 또는 QDockWidget)가 있는 컨테이너의 경우 false를 반환해야 합니다.

addWidget() 및 canRemove()도 참조하세요 .

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

지정된 index 의 위젯을 제거할 수 있는지 여부를 반환합니다. 현재 페이지를 제거하는 컨텍스트 메뉴 옵션이 활성화되어 있는지 여부를 결정합니다.

단일 고정 페이지(예: QScrollArea 또는 QDockWidget)가 있는 컨테이너의 경우 false를 반환해야 합니다.

remove() 및 canAddWidget()도 참조하세요 .

[pure virtual] int QDesignerContainerExtension::count() const

컨테이너의 페이지 수를 반환합니다.

[pure virtual] int QDesignerContainerExtension::currentIndex() const

컨테이너에서 현재 선택된 페이지의 색인을 반환합니다.

setCurrentIndex()도 참조하세요 .

[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)

확장 프로그램의 페이지 목록에 있는 index 에 지정된 page 을 삽입하여 컨테이너에 추가합니다.

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

확장 프로그램의 페이지 목록에서 지정된 index 페이지를 반환합니다.

addWidget() 및 insertWidget()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.