사용자 정의 위젯 확장 기능 만들기
Qt Widgets Designer 용 사용자 정의 위젯 플러그인이 준비되면, 사용자 정의 위젯 확장 기능을 사용하여 Qt Widgets Designer 작업 공간 내에서 해당 플러그인에 기대되는 동작과 기능을 제공할 수 있습니다.
확장 유형
Qt Widgets Designer 에는 여러 가지 확장 유형이 있습니다. 각 확장 기본 클래스만 교체하면, 이러한 모든 확장을 동일한 패턴으로 사용할 수 있습니다.
QDesignerContainerExtension 사용자 정의 다중 페이지 컨테이너를 구현할 때는 필수입니다.
![]() | QDesignerTaskMenuExtension QDesignerTaskMenuExtension 는 사용자 정의 위젯에 유용합니다. 이 확장은 Qt Widgets Designer 의 작업 메뉴에 사용자 정의 메뉴 항목을 추가할 수 있게 해줍니다. '작업 메뉴 확장' 예제는 이 클래스를 사용하는 방법을 보여줍니다. |
![]() | QDesignerContainerExtension QDesignerContainerExtension 사용자 정의 다중 페이지 컨테이너를 구현할 때 필요합니다. 이 클래스는 Qt Widgets Designer 의 다중 페이지 컨테이너 플러그인에 대한 페이지를 추가하고 삭제할 수 있게 해주는 확장 기능을 제공합니다. ‘컨테이너 확장 (Container Extension )’ 예제는 이 클래스의 사용 방법을 더 자세히 설명합니다. 참고: 일부 위젯(예: QTabWidget)의 경우 구현 방식상 페이지별 사용자 정의 속성을 추가할수 없습니다 . |
![]() | QDesignerMemberSheetExtension QDesignerMemberSheetExtension 클래스를 사용하면 신호와 슬롯을 연결할 때 표시되는 위젯의 멤버 함수를 조작할 수 있습니다. |
![]() | QDesignerPropertySheetExtension, QDesignerDynamicPropertySheetExtension 이러한 확장 클래스를 사용하면 Qt Widgets Designer 의 속성 편집기에서 위젯의 속성이 표시되는 방식을 제어할 수 있습니다. |
Qt Widgets Designer 는 QDesignerPropertySheetExtension 및 QDesignerMemberSheetExtension 클래스를 사용하여 속성 편집기, 신호 편집기 및 슬롯 편집기에 데이터를 제공합니다. 작업 공간에서 위젯이 선택될 때마다 Qt Widgets Designer 는 해당 위젯의 속성 시트 확장 기능을 조회하며, 마찬가지로 두 위젯 간의 연결이 요청될 때마다 Qt Widgets Designer 는 해당 위젯들의 멤버 시트 확장 기능을 조회합니다.
경고: 모든 위젯에는 기본 속성 시트와 멤버 시트가 있습니다. 사용자 정의 속성 시트나 멤버 시트 확장 기능을 구현하면, 사용자 정의 확장 기능이 기본 시트를 재정의하게 됩니다.
확장 기능 만들기
확장 기능을 생성하려면 ` QObject `과 적절한 기본 클래스를 모두 상속받고, 해당 함수들을 재구현해야 합니다. 인터페이스를 구현하는 것이므로, 확장 클래스 정의에서 ` Q_INTERFACES()` 매크로를 사용하여 메타 객체 시스템에 해당 인터페이스가 알려지도록 해야 합니다. 예를 들어:
class MyExtension: public QObject,
public QDesignerContainerExtension
{
Q_OBJECT
Q_INTERFACE(QDesignerContainerExtension)
...
}이렇게 하면 ` Qt Widgets Designer `가 ` qobject_cast()` 함수를 사용하여 ` QObject ` 포인터만을 통해 지원되는 인터페이스를 조회할 수 있게 됩니다.
확장 기능 노출 Qt Widgets Designer
Qt Widgets Designer 에서는 확장 기능이 필요할 때까지 생성되지 않습니다. 따라서 확장 기능을 구현할 때는 ` QExtensionFactory `을 상속받아 확장 기능의 인스턴스를 생성할 수 있는 클래스를 만들어야 합니다. 또한, ` Qt Widgets Designer`의 확장 관리자에 팩토리를 등록해야 하며, 확장 관리자가 확장 기능의 생성을 처리합니다.
확장 기능이 요청되면, Qt Widgets Designer 의 확장 관리자는 등록된 팩토리들을 차례로 순회하며, 선택된 위젯에 대해 요청된 확장 기능을 생성할 수 있는 팩토리를 찾을 때까지 각 팩토리에 대해 QExtensionFactory::createExtension()를 호출합니다. 그런 다음 해당 팩토리가 확장 기능의 인스턴스를 생성합니다.

확장 기능 팩토리 생성
QExtensionFactory 클래스는 표준 확장 팩토리를 제공하지만, 사용자 정의 확장 팩토리를 위한 인터페이스로도 사용할 수 있습니다.
목적은 QExtensionFactory::createExtension() 함수를 재구현하여 MultiPageWidget 컨테이너 확장 기능과 같은 사용자 정의 확장 기능을 생성할 수 있도록 하는 것입니다.
새로운 ` 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;
}
}Qt Widgets Designer 의 확장 관리자(Extension Manager)에 접근하기
사용자 정의 위젯 플러그인을 구현할 때는 QDesignerCustomWidgetInterface 의 서브클래스를 만들어 Qt Widgets Designer 에 플러그인을 노출해야 합니다. 이에 대한 자세한 내용은 ‘ Qt Widgets Designer 용 사용자 정의 위젯 만들기’ 섹션에서 다룹니다. 확장 팩토리의 등록은 일반적으로 QDesignerCustomWidgetInterface::initialize() 함수에서 이루어집니다:
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
{
if (initialized)
return;
QExtensionManager *manager = formEditor->extensionManager();
Q_ASSERT(manager != 0);
manager->registerExtensions(new MyExtensionFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
initialized = true;
}QDesignerCustomWidgetInterface::initialize() 함수 내의 formEditor 매개변수는 Qt Widgets Designer 의 현재 QDesignerFormEditorInterface 객체에 대한 포인터입니다. QDesignerFormEditorInterface::extensionManager() 함수를 사용하여 Qt Widgets Designer 의 확장 관리자에 대한 인터페이스를 가져와야 합니다. 그런 다음 QExtensionManager::registerExtensions() 함수를 사용하여 사용자 정의 확장 팩토리를 등록합니다.
관련 예제
Qt Widgets Designer 에서 사용자 정의 위젯 확장 기능을 만드는 방법에 대한 자세한 내용은 ‘작업 메뉴 확장 ( Task Menu Extension)’ 및 ‘컨테이너 확장(Container Extension )’ 예제를 참조하십시오.
© 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.



