使用QML创建上下文菜单

5
2个回答

10
需要同时导入Qt Quick Controls和Qt Quick:
import QtQuick 2.0
import QtQuick.Controls 1.1

如果需要上下文菜单,您需要调用 popup() 方法,该方法会在鼠标指针处打开菜单。


2
+1 这是正确的答案,其他的是在Qt Quick Controls出现之前的解决方法。 - cmannett85

1

我为我的桌面应用程序创建了一个定制的上下文菜单。这对我来说完美地工作。我认为这可能会有所帮助。

ContextMenu.qml

import QtQuick 1.1

Rectangle {
    id: contextMenuItem
    signal menuSelected(int index) // index{1: Select All, 2: Remove Selected}
    property bool isOpen: false
    width: 150
    height: menuHolder.height + 20
    visible: isOpen
    focus: isOpen
    border { width: 1; color: "#BEC1C6" }

    Column {
        id: menuHolder
        spacing: 1
        width: parent.width
        height: children.height * children.length
        anchors { verticalCenter: parent.verticalCenter; left: parent.left; leftMargin: 3 }

        ContextButton {
            id: selectedAll
            button_text: "Select All"
            index: 1
            onButtonClicked: menuSelected(index);
        }

        ContextButton {
            id: removeSelected
            button_text: "Remove Selected"
            index: 2
            onButtonClicked: menuSelected(index);
        }
    }
}

ContextItem.qml

import QtQuick 1.1

Item {
    id: contextButtonItem
    property string button_text;
    property bool clicked;
    property int index;
    property string target;
    property bool enable: true;
    signal buttonClicked;
    height: 25
    width: parent.width - 5

    function viewButtonHovered() {
        viewButton.state = "hovered";
        outerArea.z= -10;
    }

    function viewButtonExited() {
        outerArea.z= 1;
        if(clicked == false) {
            viewButton.state = "";
        } else {
            viewButton.state = "clicked"
        }
    }
    Rectangle {
        id: viewButton;
        height: vButton.height + 4
        width: parent.width

        Text {
            id: vButton
            text: qsTr(button_text)
            width: parent.width
            anchors { verticalCenter: parent.verticalCenter; left: parent.left; leftMargin: 10 }
            font { pixelSize: 14 }
        }
        MouseArea {
            hoverEnabled: enable
            anchors.fill: parent
            enabled: enable
            onClicked: buttonClicked();
            onEntered: viewButtonHovered();
            onExited: viewButtonExited();
        }
        states: [
            State {
                name: "clicked";
                PropertyChanges { target: vButton; color: "#286E1E"; }
            },
            State {
                name: "hovered";
                PropertyChanges { target: vButton; color: "#BEA1C6"; }
            },
            State {
                name: "normal";
                PropertyChanges { target: vButton; color: "#232323"; }
            }
        ]
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接