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 의 확장 관리자에 대한 인터페이스를 검색할 수 있습니다. Qt Widgets Designer 의 현재 QDesignerFormEditorInterface 객체(위 예제에서는formEditor
)에 대한 포인터는 QDesignerCustomWidgetInterface::initialize() 함수의 매개 변수에 의해 제공됩니다. 사용자 정의 위젯 플러그인을 구현할 때는 QDesignerCustomWidgetInterface 을 서브클래스화하여 Qt Widgets Designer 에 플러그인을 노출해야 합니다.
그런 다음 확장이 필요한 경우 Qt Widgets Designer 의 확장 관리자는 선택한 객체에 대해 요청된 확장을 생성할 수 있는 첫 번째 확장자를 찾을 때까지 등록된 모든 팩토리를 QExtensionFactory::createExtension()을 호출하여 각각 실행합니다. 그러면 이 팩토리가 확장 프로그램의 인스턴스를 만듭니다.
Qt Widgets Designer 에는 네 가지 유형의 확장이 있습니다: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension, QDesignerTaskMenuExtension. Qt Widgets Designer 의 동작은 요청된 확장이 컨테이너, 멤버 시트, 속성 시트 또는 작업 메뉴와 연결되어 있는지 여부에 관계없이 동일합니다.
QExtensionManager 클래스를 사용하는 전체 예제는 작업 메뉴 확장 예제를 참조하세요. 이 예에서는 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 *객체, 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)
객체가 T형(또는 하위 클래스)인 경우 주어진 object 형으로 형변환된 확장자를 반환하고, 그렇지 않으면 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")
회사 및 제품 이름을 사용하는 것이 식별자의 고유성을 보장하는 좋은 방법입니다.
사용자 지정 확장 클래스를 구현할 때는 qt_extension() 함수를 사용할 수 있도록 Q_DECLARE_EXTENSION_INTERFACE()를 사용해야 합니다. 이 매크로는 일반적으로 관련 헤더 파일의 ExtensionName 에 대한 클래스 정의 바로 뒤에 위치합니다.
Q_DECLARE_INTERFACE()도 참조하세요 .
© 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.