QML 自定义QMenu

效果

请添加图片描述

代码

mian.qml

import QtQuick
import QtQuick.Controls //qt风格
//import Qt.labs.platform //native 风格menu

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MouseArea{
        anchors.fill: parent
        acceptedButtons: Qt.RightButton
        onClicked: {
            menu.x = mouseX
            menu.y = mouseY
            menu.open()
        }
    }

    Menu{
        id: menu
        padding: 6
        background: Rectangle{
            radius: 6
            color: "#20000000"
            implicitWidth: 200 //使用width不会显示
            implicitHeight: 10
        }
        delegate: MenuItem{
            id: menuItem
            implicitWidth: 200
            implicitHeight: 30
            rightPadding: 6

            //icon text shortcut arrow
            arrow: Canvas {
                implicitWidth: 10
                implicitHeight: 10
                x: parent.width - width - menuItem.rightPadding
                y: (menuItem.implicitHeight - implicitHeight) / 2
                visible: menuItem.subMenu
                onPaint: {
                    var ctx = getContext("2d")
                    ctx.fillStyle = menuItem.highlighted ? "#ffffff" : "#c0000000"
                    ctx.moveTo(0, 0)
                    ctx.lineTo(0, height)
                    ctx.lineTo(width, height / 2)
                    ctx.closePath()
                    ctx.fill()
                }
            }
            contentItem:  Text{text: menuItem.text}
            background: Rectangle {
                opacity: enabled ? 1 : 0.3
                color: menuItem.highlighted ? "#20000000" : "transparent"
                radius: 4
            }
        }

        Action { text: qsTr("复制") }
        Action { text: qsTr("粘贴") }

        Item{
            height: 6
            MenuSeparator {anchors.centerIn: parent}
        }

        Menu{
            title: qsTr("更多打开方式")
            Action { text: qsTr("从xxx打开") }
        }
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值