이 페이지에서

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

공개 함수

QDesignerContainerExtension()
QDesignerContainerExtension(const QDesignerContainerExtension &)
QDesignerContainerExtension(QDesignerContainerExtension &&)
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 &operator=(QDesignerContainerExtension &&)
QDesignerContainerExtension &operator=(const QDesignerContainerExtension &)

상세 설명

객체에 현재 페이지 앞에 페이지를 삽입하는 옵션이 표시된 <span translate=Qt Widgets Designer UI 편집기의 스크린샷" src="images/containerextension-example.webp" title="객체에 현재 페이지 앞에 페이지를 삽입하는 옵션이 표시된 Qt Widgets Designer UI 편집기의 스크린샷"/>

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 Designer 의 extension manager 를 사용하여 이를 등록해야 합니다.

컨테이너 확장 기능이 호출되면, Qt Widgets Designer 의 extension manager 는 등록된 모든 팩토리를 순차적으로 검사하며, 각 팩토리에 대해 QExtensionFactory::createExtension()를 호출하여 컨테이너 확장 기능을 생성할 수 있는 첫 번째 팩토리가 발견될 때까지 이 과정을 반복합니다. 이 팩토리는 이후 플러그인을 위한 확장 기능을 생성합니다.

Qt Widgets Designer 에는 QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension, QDesignerTaskMenuExtension 의 네 가지 확장 유형이 있습니다. 요청된 확장이 다중 페이지 컨테이너, 멤버 시트, 속성 시트 또는 작업 메뉴와 연관되어 있든 상관없이 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 및 사용자 정의 위젯 확장 만들기항목도 참조하십시오 .

멤버 함수 설명서

[constexpr noexcept default] QDesignerContainerExtension::QDesignerContainerExtension()

QDesignerContainerExtension 의 인스턴스를 기본 생성합니다.

[delete] QDesignerContainerExtension::QDesignerContainerExtension(const QDesignerContainerExtension &)

QDesignerContainerExtension 의 인스턴스를 복사 생성합니다. 이 함수는 삭제되었습니다.

[delete] QDesignerContainerExtension::QDesignerContainerExtension(QDesignerContainerExtension &&)

QDesignerContainerExtension 의 인스턴스를 move-construct로 생성합니다. 이 함수는 삭제되었습니다.

[virtual constexpr noexcept default] 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)

지정된 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

확장 기능의 페이지 목록에서 지정된 index 에 해당하는 페이지를 반환합니다.

addWidget() 및 insertWidget()도 참조하십시오 .

[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(QDesignerContainerExtension &&)

other 를 이 QDesignerContainerExtension 인스턴스에 할당합니다. 이 함수는 삭제됩니다.

[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(const QDesignerContainerExtension &)

other 를 이 QDesignerContainerExtension 인스턴스에 복사-할당합니다. 이 함수는 삭제됩니다.

© 2026 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.