이 페이지에서

QExtensionManager Class

QExtensionManager 클래스는 ` Qt Widgets Designer`에 대한 확장 관리 기능을 제공합니다. 더 보기...

헤더: #include <QExtensionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
상속:QObject 그리고 QAbstractExtensionManager

공개 함수

QExtensionManager(QObject *parent = nullptr)
virtual ~QExtensionManager()

재구현된 공용 함수

virtual QObject *extension(QObject *object, const QString &iid) const override
virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
T qt_extension(QAbstractExtensionManager *manager, QObject *object)

매크로

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

상세 설명

Qt Widgets Designer 에서는 확장 기능이 필요할 때까지 생성되지 않습니다. 따라서 확장 기능을 구현할 때는 QExtensionFactory, 즉 해당 확장 기능의 인스턴스를 생성할 수 있는 클래스를 함께 생성하고, Qt Widgets Designer 의 확장 관리자를 사용하여 등록해야 합니다.

확장 기능 팩토리의 등록은 일반적으로 ` QDesignerCustomWidgetInterface::initialize()` 함수에서 수행됩니다:

        void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
        {
            if (initialized)
                return;

            auto *manager = formEditor->extensionManager();
            Q_ASSERT(manager != nullptr);

            manager->registerExtensions(new MyExtensionFactory(manager),
                                        Q_TYPEID(QDesignerTaskMenuExtension));

            initialized = true;
        }

QExtensionManager는 직접 인스턴스화되도록 설계되지 않았습니다. QDesignerFormEditorInterface::extensionManager() 함수를 사용하여 Qt Widgets Designer 의 확장 관리자에 대한 인터페이스를 가져올 수 있습니다. QDesignerCustomWidgetInterface::initialize() 함수의 매개변수를 통해 Qt Widgets Designer 의 현재 QDesignerFormEditorInterface 객체(위 예제에서는formEditor )에 대한 포인터가 제공됩니다. 사용자 정의 위젯 플러그인을 구현할 때는 QDesignerCustomWidgetInterface 를 상속받은 서브클래스를 만들어 Qt Widgets Designer 에 플러그인을 노출시켜야 합니다.

그런 다음, 확장 기능이 필요할 때 Qt Widgets Designer 의 확장 관리자는 등록된 모든 팩토리를 순차적으로 처리하며, 선택된 객체에 대해 요청된 확장 기능을 생성할 수 있는 첫 번째 팩토리가 발견될 때까지 각 팩토리에 대해 QExtensionFactory::createExtension()를 호출합니다. 이 팩토리는 이후 확장 기능의 인스턴스를 생성합니다.

Qt Widgets Designer 에서는 QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension 및 QDesignerTaskMenuExtension 의 네 가지 확장 유형을 사용할 수 있습니다. Qt Widgets Designer 의 동작은 요청된 확장이 컨테이너, 멤버 시트, 속성 시트 또는 작업 메뉴와 연관되어 있는지 여부에 관계없이 동일합니다.

QExtensionManager 클래스를 사용한 전체 예제는 ‘작업 메뉴 확장(Task Menu Extension)’ 예제를 참조하십시오. 이 예제는 ‘ Qt Designer ’용 사용자 정의 위젯 플러그인을 만드는 방법과, QDesignerTaskMenuExtension 클래스를 사용하여 Qt Widgets Designer 의 작업 메뉴에 사용자 정의 항목을 추가하는 방법을 보여줍니다.

QExtensionFactory 및 QAbstractExtensionManager도 참조하십시오 .

멤버 함수 문서

[explicit] QExtensionManager::QExtensionManager(QObject *parent = nullptr)

지정된 ` parent`를 사용하여 확장 관리자를 생성합니다.

[virtual noexcept] QExtensionManager::~QExtensionManager()

확장 프로그램 관리자를 삭제합니다.

[override virtual] QObject *QExtensionManager::extension(QObject *object, const QString &iid) const

QAbstractExtensionManager::extension(QObject *object, const QString &iid) const를 재구현합니다.

주어진 ` object`에 대해 ` iid`로 지정된 확장자를 반환합니다.

[override virtual] void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid)를 재구현합니다.

주어진 factory 및 확장 식별자 iid 로 지정된 확장을 등록합니다.

[override virtual] void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid)를 재구현합니다.

주어진 factory 및 확장 식별자 iid 로 지정된 확장을 등록 해제합니다.

관련 비회원 함수

template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)

주어진 object 객체가 T형(또는 그 하위 클래스)인 경우, T형으로 형변환된 객체의 확장(extension)을 반환하고, 그렇지 않은 경우 0을 반환합니다. 확장은 주어진 확장 manager 를 사용하여 가져옵니다.

       auto *manager = formEditor->extensionManager();

       auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);

       if(propertySheet) {...}

사용자 정의 위젯 플러그인을 구현할 때, Qt Widgets Designer 의 현재 QDesignerFormEditorInterface 객체(formEditor)에 대한 포인터는 QDesignerCustomWidgetInterface::initialize() 함수의 매개변수를 통해 제공됩니다.

위 예제의 위젯에 정의된 QDesignerPropertySheetExtension 가 없는 경우, propertySheet 는 null 포인터가 됩니다.

매크로 문서

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

주어진 ‘ Identifier ’(문자열 리터럴)을 ‘ ExtensionName ’라는 확장 클래스에 연결합니다. ‘ Identifier ’는 고유해야 합니다. 예를 들어:

   Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")

회사명과 제품명을 사용하는 것은 식별자의 고유성을 보장하는 좋은 방법입니다.

사용자 정의 확장 클래스를 구현할 때는 Q_DECLARE_EXTENSION_INTERFACE()를 사용하여 qt_extension() 함수를 사용할 수 있도록 해야 합니다. 이 매크로는 일반적으로 관련 헤더 파일에서 ExtensionName 클래스 정의 바로 뒤에 위치합니다.

Q_DECLARE_INTERFACE()도 참조하십시오 .

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