이 페이지에서

QDesignerTaskMenuExtension Class

QDesignerTaskMenuExtension 클래스를 사용하면 Qt Widgets Designer 의 작업 메뉴에 사용자 정의 메뉴 항목을 추가할 수 있습니다. 더 보기...

헤더: #include <QDesignerTaskMenuExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

공개 함수

QDesignerTaskMenuExtension()
QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &)
QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&)
virtual ~QDesignerTaskMenuExtension()
virtual QAction *preferredEditAction() const
virtual QList<QAction *> taskActions() const = 0
QDesignerTaskMenuExtension &operator=(QDesignerTaskMenuExtension &&)
QDesignerTaskMenuExtension &operator=(const QDesignerTaskMenuExtension &)

상세 설명

QDesignerTaskMenuExtension은 사용자 정의 작업 메뉴 확장 기능을 생성하기 위한 인터페이스를 제공합니다. 일반적으로 Qt Widgets Designer 의 특정 플러그인에 특화된 작업 메뉴 항목을 생성하는 데 사용됩니다.

Qt Widgets Designer Qt Widgets Designer 는 QDesignerTaskMenuExtension을 사용하여 작업 메뉴를 구성합니다. 작업 메뉴가 요청될 때마다 는 선택된 위젯의 작업 메뉴 확장 기능을 조회합니다.

<span translate=Qt Widgets Designer의 컨텍스트 메뉴에 있는 사용자 정의 “상태 편집...” 작업의 스크린샷." src="images/taskmenuextension-example.webp" title="Qt Widgets Designer의 컨텍스트 메뉴에 있는 사용자 정의 “상태 편집...” 작업의 스크린샷."/>

작업 메뉴 확장 기능은 QAction의 모음입니다. 지정된 확장 기능을 가진 플러그인이 선택되면 해당 액션들이 작업 메뉴의 항목으로 표시됩니다. 위 이미지는 Qt Widgets Designer 의 기본 작업 메뉴 항목( 잘라내기, 복사, 붙여넣기 등) 외에도 표시되는 사용자 정의 '상태 편집...' 액션을 보여줍니다.

사용자 정의 작업 메뉴 확장 기능을 만들려면, 확장 클래스가 ` QObject `과 `QDesignerTaskMenuExtension`을 모두 상속받아야 합니다. 예를 들면 다음과 같습니다:

class MyTaskMenuExtension : public QObject,
        public QDesignerTaskMenuExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerTaskMenuExtension)

public:
    MyTaskMenuExtension(MyCustomWidget *widget, QObject *parent);

    QAction *preferredEditAction() const;
    QList<QAction *> taskActions() const;

private slots:
    void mySlot();

private:
    MyCustomWidget *widget;
    QAction *myAction;
};

인터페이스를 구현하고 있으므로, Q_INTERFACES() 매크로를 사용하여 메타 객체 시스템에 이를 알리도록 해야 합니다. 이를 통해 Qt Widgets Designer 는 qobject_cast() 함수를 사용하여 QObject 포인터만으로도 지원되는 인터페이스를 조회할 수 있습니다.

Qt Widgets Designer 의 작업 메뉴에 포함될 작업 목록을 반환하도록 taskActions() 함수를 재구현해야 합니다. 선택적으로, preferredEditAction() 함수를 재구현하여 플러그인을 선택하고 F2 키를 누를 때 호출될 동작을 설정할 수 있습니다. 선호하는 편집 동작은 taskActions()에서 반환된 동작 중 하나여야 하며, 정의되어 있지 않은 경우 F2 키를 누르면 단순히 무시됩니다.

Qt Widgets Designer 에서는 확장 기능이 필요할 때까지 생성되지 않습니다. 예를 들어, 작업 메뉴 확장 기능은 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(QDesignerTaskMenuExtension))
        return 0;

    if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object))
        return new MyTaskMenuExtension(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(QDesignerContainerExtension))) {
        return new MyContainerExtension(widget, parent);

    } else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
        return new MyTaskMenuExtension(widget, parent);

    } else {
        return 0;
    }
}

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

QExtensionFactory, QExtensionManager 및 사용자 정의 위젯 확장 기능 만들기도참조하십시오 .

멤버 함수 문서

[constexpr noexcept default] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension()

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

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

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

[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&)

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

[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

작업 메뉴 확장 기능을 제거합니다.

[virtual] QAction *QDesignerTaskMenuExtension::preferredEditAction() const

지정된 확장자를 가진 플러그인을 선택하고 F2 키를 누를 때 호출되는 액션을 반환합니다.

이 액션은 taskActions() 함수가 반환하는 액션 중 하나여야 합니다.

[pure virtual] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const

지정된 확장자를 가진 플러그인이 선택되었을 때, Qt Widgets Designer 의 작업 메뉴에 포함될 작업 목록 형태로 작업 메뉴 확장자를 반환합니다.

이 목록에 동작을 추가하려면 이 함수를 재구현해야 합니다.

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

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

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

other 를 이 QDesignerTaskMenuExtension 인스턴스에 복사-할당합니다. 이 함수는 삭제되었습니다.

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