Menu QML Type

컨텍스트 메뉴 또는 팝업 메뉴로 사용할 수 있는 메뉴 팝업입니다. 더 보기...

Import Statement: import QtQuick.Controls
Inherits:

Popup

속성

방법

  • Action actionAt(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void addAction(Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void addItem(Item item)
  • void addMenu(Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void dismiss() (since QtQuick.Controls 2.3 (Qt 5.10))
  • void insertAction(int index, Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void insertItem(int index, Item item)
  • void insertMenu(int index, Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Item itemAt(int index)
  • Menu menuAt(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void moveItem(int from, int to)
  • void popup(MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(point pos, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, point pos, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(real x, real y, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void popup(Item parent, real x, real y, MenuItem item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeAction(Action action) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeItem(Item item) (since QtQuick.Controls 2.3 (Qt 5.10))
  • void removeMenu(Menu menu) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Action takeAction(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • MenuItem takeItem(int index) (since QtQuick.Controls 2.3 (Qt 5.10))
  • Menu takeMenu(int index) (since QtQuick.Controls 2.3 (Qt 5.10))

자세한 설명

macOS 기본 메뉴.

네이티브가 아닌 머티리얼 스타일 메뉴.

메뉴에는 두 가지 주요 사용 사례가 있습니다:

  • 컨텍스트 메뉴; 예를 들어 마우스 오른쪽 버튼 클릭 후 표시되는 메뉴
  • 팝업 메뉴; 예를 들어 버튼을 클릭한 후 표시되는 메뉴

컨텍스트 메뉴로 사용하는 경우 메뉴를 여는 권장 방법은 popup()를 호출하는 것입니다. 위치를 명시적으로 지정하지 않는 한 메뉴는 마우스 커서를 사용할 수 있는 데스크톱 플랫폼에서는 마우스 커서 위치에, 그렇지 않은 경우에는 상위 항목의 중앙에 위치합니다.

MouseArea {
    anchors.fill: parent
    acceptedButtons: Qt.LeftButton | Qt.RightButton
    onClicked: {
        if (mouse.button === Qt.RightButton)
            contextMenu.popup()
    }
    onPressAndHold: {
        if (mouse.source === Qt.MouseEventNotSynthesized)
            contextMenu.popup()
    }

    Menu {
        id: contextMenu
        MenuItem { text: "Cut" }
        MenuItem { text: "Copy" }
        MenuItem { text: "Paste" }
    }
}

팝업 메뉴로 사용하는 경우 해당 속성을 사용하여 원하는 xy 좌표를 지정하여 위치를 지정하고 open()를 호출하여 메뉴를 여는 것이 가장 쉽습니다.

Button {
    id: fileButton
    text: "File"
    onClicked: menu.open()

    Menu {
        id: menu
        y: fileButton.height

        MenuItem {
            text: "New..."
        }
        MenuItem {
            text: "Open..."
        }
        MenuItem {
            text: "Save"
        }
    }
}

버튼을 클릭했을 때 메뉴도 닫아야 하는 경우에는 Popup.CloseOnPressOutsideParent 플래그를 사용합니다:

onClicked: menu.visible = !menu.visible

Menu {
    // ...
    closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent

QtQuick.Controls 2.3(Qt 5.10) 이후부터는 하위 메뉴를 만들고 메뉴 안에 Action 객체를 선언할 수도 있습니다:

Menu {
    Action { text: "Cut" }
    Action { text: "Copy" }
    Action { text: "Paste" }

    MenuSeparator { }

    Menu {
        title: "Find/Replace"
        Action { text: "Find Next" }
        Action { text: "Find Previous" }
        Action { text: "Replace" }
    }
}

하위 메뉴는 마우스 커서를 사용할 수 있는 데스크톱 플랫폼에서 기본적으로 cascading 입니다. 비계단식 메뉴는 한 번에 한 메뉴씩 표시되며 상위 메뉴의 중앙에 표시됩니다.

일반적으로 메뉴 항목은 메뉴의 하위 항목으로 정적으로 선언되지만 메뉴는 add, insert, moveremove 항목에 대한 API도 동적으로 제공합니다. 메뉴의 항목은 itemAt() 또는 contentChildren 을 사용하여 액세스할 수 있습니다.

MenuItems 이 가장 일반적으로 Menu와 함께 사용되지만 모든 유형의 항목을 포함할 수 있습니다.

여백

팝업에서 상속되었으므로 Menu는 margins 을 지원합니다. 기본적으로 모든 기본 제공 스타일은 메뉴가 창 범위 내에 유지되도록 메뉴의 여백에 0 을 지정합니다. 메뉴가 창 밖으로 나가도록 허용하려면(예: 보기로 이동하는 애니메이션을 적용하려면) 여백 속성을 -1 으로 설정합니다.

메뉴 항목 동적으로 생성하기

Instantiator 또는 동적 객체 생성을 사용하여 메뉴 항목을 동적으로 생성할 수 있습니다.

인스턴티베이터 사용

Instantiator 를 사용하여 메뉴 항목을 동적으로 생성할 수 있습니다. 다음 코드는 설정에 저장된 파일 목록에서 항목을 가져오는 '최근 파일' 하위 메뉴를 구현하는 방법을 보여줍니다:

Menu {
    title: qsTr("File")

    Menu {
        id: recentFilesMenu
        title: qsTr("Recent Files")
        enabled: recentFilesInstantiator.count > 0

        Instantiator {
            id: recentFilesInstantiator
            model: settings.recentFiles
            delegate: MenuItem {
                text: settings.displayableFilePath(modelData)
                onTriggered: loadFile(modelData)
            }

            onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object)
            onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object)
        }

        MenuSeparator {}

        MenuItem {
            text: qsTr("Clear Recent Files")
            onTriggered: settings.clearRecentFiles()
        }
    }
}

동적 개체 생성 사용

Qt.createComponent()를 사용하여 QML 파일에서 컴포넌트를 동적으로 로드할 수도 있습니다. 컴포넌트가 준비되면 해당 컴포넌트의 createObject() 메서드를 호출하여 해당 컴포넌트의 인스턴스를 만들 수 있습니다.

Row {
    anchors.centerIn: parent

    Component {
        id: menuItemComponent

        MenuItem {}
    }

    Button {
        id: button
        text: "Menu"
        onClicked: menu.open()
        Menu {
            id: menu
        }
    }

    Button {
        text: "Add item"
        onClicked: {
            onClicked: {
                let menuItem = menuItemComponent.createObject(
                    menu.contentItem, { text: qsTr("New item") })
                menu.addItem(menuItem)
            }
        }
    }
}

Qt 6.8부터 메뉴는 플랫폼에 따라 세 가지 다른 구현을 제공합니다. popupType 을 설정하여 어느 것을 선호할지 선택할 수 있습니다. 이를 통해 메뉴를 별도의 창으로 표시할지, 부모 창 안의 항목으로 표시할지, 기본 메뉴로 표시할지 제어할 수 있습니다. 이러한 옵션에 대한 자세한 내용은 here 에서 확인할 수 있습니다.

기본값 popupType 은 스타일에 따라 결정됩니다. 예를 들어 macOS 스타일은 Popup.Native 로 설정하는 반면 Imagine 스타일은 Popup.Window (스타일에서 팝업 유형을 설정하지 않은 경우 기본값)을 사용합니다. 메뉴에 사용자 정의 항목을 추가하고 스타일에 관계없이 해당 항목을 사용하려면 팝업 유형을 Popup.Window (또는 Popup.Item)로 명시적으로 설정해야 합니다. 또 다른 대안은 Qt::AA_DontUseNativeMenuWindows application attribute 으로 설정하는 것입니다. 이렇게 하면 스타일에 관계없이 전체 애플리케이션에 대한 기본 컨텍스트 메뉴가 비활성화됩니다.

기본값 popupType 은 스타일에 따라 결정됩니다. 예를 들어 macOS 스타일은 Popup.Native 로 설정하고 Imagine 스타일은 Popup.Window (스타일에서 팝업 유형을 설정하지 않은 경우 기본값)을 사용합니다. 메뉴에 사용자 지정을 추가하고 스타일에 관계없이 사용하려면 팝업 유형을 Popup.Window (또는 Popup.Item)로 명시적으로 설정해야 합니다.

메뉴에서 선호하는 유형을 사용할 수 있는지 여부는 플랫폼에 따라 다릅니다. Popup.Item 는 모든 플랫폼에서 지원되지만 Popup.Window 은 일반적으로 데스크톱 플랫폼에서만 지원됩니다. 또한 메뉴가 native menubar 안에 있는 경우 메뉴도 네이티브가 됩니다. 메뉴가 다른 메뉴 내부의 하위 메뉴인 경우 상위(또는 루트) 메뉴에 따라 유형이 결정됩니다.

기본 메뉴 사용 시 제한 사항

popupTypePopup.Native 으로 설정하면 Popup.ItemPopup.Window 을 사용할 때와 비교하여 몇 가지 제한 사항과 차이점이 있습니다.

API 차이점

네이티브 메뉴를 사용하는 경우 모든 플랫폼에서 메뉴 API의 하위 집합만 지원됩니다:

또한 open() 또는 popup()와 같은 팝업을 표시하면 일부 플랫폼에서는 차단 호출이 될 수 있습니다. 즉, 메뉴가 다시 닫히기 전에는 호출이 반환되지 않으므로 애플리케이션의 로직에 영향을 줄 수 있습니다. 애플리케이션이 여러 플랫폼을 대상으로 하는 경우, 즉 기본 메뉴가 지원되지 않는 플랫폼에서 실행되는 경우 특히 이 점을 고려해야 합니다. 이 경우 예를 들어 팝업 유형은 Popup.Item 로 돌아가며 open() 호출은 차단되지 않습니다.

예를 들어 MenuItem 같은 항목은 여전히 해당 기본 메뉴 항목의 클릭에 신호를 보내 반응하지만 해당 기본 메뉴 항목으로 대체됩니다.

렌더링 차이점

네이티브 메뉴는 플랫폼에서 사용 가능한 네이티브 메뉴 API를 사용하여 구현됩니다. 따라서 이러한 메뉴와 모든 콘텐츠는 QML이 아닌 플랫폼에 의해 렌더링됩니다. 즉, delegate 은 렌더링에 사용되지 않습니다. 그러나 항상 인스턴스화되지만 숨겨져 있으므로 onCompleted()와 같은 함수는 플랫폼에 관계없이 실행되고 popupType.

지원되는 플랫폼

네이티브 메뉴는 현재 다음 플랫폼에서 지원됩니다:

  • Android
  • iOS
  • Linux(GTK+ 플랫폼 테마로 실행할 때 독립형 컨텍스트 메뉴로만 사용 가능)
  • macOS
  • Windows

메뉴 사용자 정의, MenuItem, 메뉴 컨트롤, 팝업 컨트롤, 자바스크립트에서 동적 QML 객체 생성, Popup type, [QML]popupType참조하세요 .

프로퍼티 문서

cascade : bool [since QtQuick.Controls 2.3 (Qt 5.10)]

이 속성은 메뉴가 하위 메뉴를 캐스케이드할지 여부를 나타냅니다.

기본값은 플랫폼별로 다릅니다. 마우스 커서를 사용할 수 있는 데스크톱 플랫폼에서는 기본적으로 메뉴가 캐스케이드됩니다. 캐스케이딩되지 않는 메뉴는 한 번에 한 메뉴씩 표시되며 상위 메뉴의 중앙에 표시됩니다.

참고: 메뉴가 열려 있는 동안에는 속성 값을 변경해도 효과가 없습니다.

참고: 이 속성은 non-native Menu 을 사용할 때만 지원됩니다.

이 속성은 QtQuick.Controls 2.3(Qt 5.10)에서 도입되었습니다.

overlap참조하십시오 .


contentData : list<QtObject> [default]

이 속성은 콘텐츠 데이터의 목록을 보유합니다.

이 목록에는 QML에서 메뉴의 자식으로 선언된 모든 객체와 addItem() 및 insertItem() 메서드를 사용하여 각각 동적으로 추가되거나 삽입된 항목이 포함됩니다.

참고: contentChildren 와 달리 contentData 에는 시각적이지 않은 QML 객체가 포함됩니다. 항목이 삽입되거나 이동할 때 순서가 바뀌지 않습니다.

Item::datacontentChildren참조하세요 .


contentModel : model [read-only]

이 속성은 메뉴 항목을 표시하는 데 사용되는 모델을 보유합니다.

콘텐츠 모델은 시각화 목적으로 제공됩니다. 메뉴의 콘텐츠를 표시하는 콘텐츠 항목에 모델로 할당할 수 있습니다.

Menu {
    id: menu
    contentItem: ListView {
        model: menu.contentModel
    }
}

이 모델을 사용하면 메뉴 항목을 메뉴의 하위 항목으로 정적으로 선언할 수 있습니다.


count : int [read-only, since QtQuick.Controls 2.3 (Qt 5.10)]

이 속성은 항목 수를 보유합니다.

이 프로퍼티는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


currentIndex : int [since QtQuick.Controls 2.3 (Qt 5.10)]

이 속성은 현재 강조 표시된 항목의 색인을 보유합니다.

메뉴 항목은 마우스 오버 또는 키보드 탐색으로 강조 표시할 수 있습니다.

참고: 이 속성은 non-native Menu 을 사용할 때만 지원됩니다.

이 속성은 QtQuick.Controls 2.3(Qt 5.10)에서 도입되었습니다.

MenuItem::highlighted참조하십시오 .


delegate : Component [since QtQuick.Controls 2.3 (Qt 5.10)]

이 속성은 동작을 표시할 항목을 만드는 데 사용되는 컴포넌트를 보유합니다.

Menu {
    Action { text: "Cut" }
    Action { text: "Copy" }
    Action { text: "Paste" }
}

참고: 델리게이트는 non-native Menu 을 사용할 때만 표시됩니다.

이 프로퍼티는 QtQuick.Controls 2.3 (Qt 5.10)에 도입되었습니다.

Action참조하십시오 .


focus : bool

이 속성은 팝업이 포커스를 원하는지 여부를 보유합니다.

팝업이 실제로 포커스를 받으면 activeFocustrue 이 됩니다. 자세한 내용은 Qt Quick 에서 키보드 포커스를 참조하십시오.

기본값은 true 입니다.

참고: 이 속성은 non-native Menu 을 사용할 때만 지원됩니다.

activeFocus참조하세요 .


icon group

icon.cache : bool

icon.color : color

icon.height : int

icon.name : string

icon.source : url

icon.width : int

이 속성 그룹은 QtQuick.Controls 6.5에 추가되었습니다.

Name설명
이름이 속성에는 사용할 아이콘의 이름이 저장됩니다.

아이콘은 플랫폼 테마에서 로드됩니다. 테마에 아이콘이 있으면 icon.source 이 설정되어 있어도 항상 해당 아이콘이 사용됩니다. 아이콘을 찾을 수 없는 경우 icon.source 이 대신 사용됩니다.

테마 아이콘에 대한 자세한 내용은 QIcon::fromTheme()를 참조하세요.

source이 속성에는 사용할 아이콘의 이름이 저장됩니다.

아이콘은 일반 이미지로 로드됩니다.

icon.name 이 설정되어 있고 유효한 테마 아이콘을 참조하는 경우 이 속성 대신 항상 해당 아이콘이 사용됩니다.

너비이 속성은 아이콘의 너비를 저장합니다.

아이콘의 너비는 이 값을 초과하지 않지만 필요한 경우 축소될 수 있습니다.

높이이 속성은 아이콘의 높이를 저장합니다.

아이콘의 높이는 이 값을 초과하지 않지만 필요한 경우 축소됩니다.

color이 속성은 아이콘의 색상을 저장합니다.

색상이 "transparent" 로 설정되지 않은 경우 아이콘은 지정된 색상으로 채색됩니다.

캐시이 속성은 아이콘을 캐시할지 여부를 지정합니다.

기본값은 true입니다.

자세한 내용은 cache 을 참조하세요.

이 속성은 QtQuick.Controls 2.13에 도입되었습니다.

참고: 이 속성은 non-native Menu 을 사용할 때만 지원됩니다.

AbstractButton::text, AbstractButton::display, 및 Qt Quick Controls 의 아이콘을참조하십시오 .


overlap : real [since QtQuick.Controls 2.3 (Qt 5.10)]

이 속성은 메뉴가 상위 메뉴와 가로로 겹치는 픽셀의 양을 유지합니다.

이 속성은 메뉴가 계단식 하위 메뉴로 사용되는 경우에만 적용됩니다.

기본값은 스타일별로 다릅니다.

참고: 메뉴가 열려 있는 동안에는 속성 값을 변경해도 효과가 없습니다.

참고: 이 속성은 non-native Menu 을 사용할 때만 지원됩니다.

이 속성은 QtQuick.Controls 2.3(Qt 5.10)에서 도입되었습니다.

cascade참조하십시오 .


title : string

이 속성은 메뉴의 제목을 저장합니다.

메뉴의 제목은 메뉴가 하위 메뉴인 경우 메뉴 항목의 텍스트에 표시되고, 메뉴 막대에 있는 경우 도구 버튼의 텍스트에 표시되는 경우가 많습니다.


메서드 문서

마우스 커서를 사용할 수 있는 데스크톱 플랫폼에서는 마우스 커서 위치에 메뉴를 열고, 그렇지 않은 경우 메뉴의 중앙에 parent 항목을 배치합니다.

메뉴는 선택적으로 특정 메뉴 item 에 맞춰 정렬할 수 있습니다. 그러면 이 항목은 current. item 을 지정하지 않으면 currentIndex-1 으로 설정됩니다.

이 QML 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.

Popup::open()도 참조하십시오 .


팝업 좌표계에서 지정된 위치 pos, 즉 parent 항목을 기준으로 한 좌표에 메뉴를 엽니다.

메뉴는 선택적으로 특정 메뉴 item 에 맞춰 정렬할 수 있습니다. 그러면 이 항목은 current. item 을 지정하지 않으면 currentIndex-1 으로 설정됩니다.

이 QML 메서드는 QtQuick.Controls 2.3(Qt 5.10)에서 도입되었습니다.

Popup::open()도 참조하십시오 .


팝업 좌표계에서 지정된 위치 x, y, 즉 parent 항목을 기준으로 한 좌표에 메뉴를 엽니다.

메뉴는 선택적으로 특정 메뉴 item 에 맞춰 정렬할 수 있습니다. 그러면 이 항목은 current. item 을 지정하지 않으면 currentIndex-1 으로 설정됩니다.

이 QML 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.

dismiss() 및 Popup::open()도 참조하십시오 .


[since QtQuick.Controls 2.3 (Qt 5.10)] Action actionAt(int index)

index, 또는 인덱스가 유효하지 않거나 지정된 인덱스에 액션이 없는 경우 null 에서 액션을 반환합니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void addAction(Action action)

이 메뉴의 끝에 action 을 추가합니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


void addItem(Item item)

항목 목록 끝에 item 을 추가합니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void addMenu(Menu menu)

이 메뉴의 끝에 menu 을 하위 메뉴로 추가합니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에서 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void dismiss()

이 메뉴가 속한 계층 구조의 모든 메뉴를 닫습니다.

참고: 메뉴와 하위 메뉴만 닫는 close()와 달리( non-native menus 사용 시) dismiss() 는 상위 메뉴를 포함한 전체 메뉴 계층을 닫습니다. 실제로는 메뉴 계층 구조에서 탐색을 구현하는 경우 close() 가 적합하며, 전체 메뉴 계층 구조를 닫는 데는 dismiss() 이 적합합니다.

이 메서드는 QtQuick.Controls 2.3 (Qt 5.10)에서 도입되었습니다.

popup() 및 Popup::close()도 참조하십시오 .


[since QtQuick.Controls 2.3 (Qt 5.10)] void insertAction(int index, Action action)

indexaction 을 삽입합니다. 인덱스는 메뉴의 모든 항목 안에 있습니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


void insertItem(int index, Item item)

indexitem 을 삽입합니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void insertMenu(int index, Menu menu)

indexmenu 을 하위 메뉴로 삽입합니다. 색인은 메뉴의 모든 항목 안에 있습니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


Item itemAt(int index)

index 에 있는 항목을 반환하거나 존재하지 않는 경우 null 을 반환합니다.


index, 또는 인덱스가 유효하지 않거나 지정된 인덱스에 하위 메뉴가 없는 경우 null 에 있는 하위 메뉴를 반환합니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


void moveItem(int from, int to)

from 항목을 to 다른 인덱스로 이동합니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeAction(Action action)

지정된 action 을 제거하고 파괴합니다.

이 메서드는 QtQuick.Controls 2.3 (Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeItem(Item item)

지정된 item 을 제거하고 파괴합니다.

이 메서드는 QtQuick.Controls 2.3 (Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] void removeMenu(Menu menu)

지정된 menu 을 제거하고 파괴합니다.

이 메서드는 QtQuick.Controls 2.3 (Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] Action takeAction(int index)

index 에서 작업을 제거하고 반환합니다. 인덱스는 메뉴의 모든 항목 내에 있습니다.

참고: 액션의 소유권은 호출자에게 이전됩니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] MenuItem takeItem(int index)

index 에서 항목을 삭제하고 반환합니다.

참고: 항목의 소유권은 호출자에게 이전됩니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


[since QtQuick.Controls 2.3 (Qt 5.10)] Menu takeMenu(int index)

메뉴를 제거하고 index 에서 반환합니다. 색인은 메뉴의 모든 항목 내에 있습니다.

참고: 메뉴의 소유권은 호출자에게 이전됩니다.

이 메서드는 QtQuick.Controls 2.3(Qt 5.10)에 도입되었습니다.


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