返回顶部
首页 > 资讯 > 精选 >Qt5中QML如何自定义环形菜单/环形选择框
  • 344
分享到

Qt5中QML如何自定义环形菜单/环形选择框

2023-06-29 12:06:07 344人浏览 八月长安
摘要

这篇“Qt5中QML如何自定义环形菜单/环形选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt5中QML如何自定义环形

这篇“Qt5中QML如何自定义环形菜单/环形选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt5中QML如何自定义环形菜单/环形选择框”文章吧。

Qt5 中本身提供了扇形菜单 PieMenu,属于 QtQuick.Extras 模块,这个模块是拓展自 QtQuick.Control1 的,QtQuick.Control1 在 Qt5 高版本被废弃,并在 Qt6 移除。

Qt5中QML如何自定义环形菜单/环形选择框

不过我们也可以用 QtQuick.Control2 的组件自定义样式来实现环形或扇形的菜单和选择框。主要思路就是使用 PathView 来替换默认的 ListView,再改下弹框的背景样式。

ItemDelegate 需要设置给 ComboBox 或者 Menu,而不是 View。最好用 Button 的相关类型(默认是 ItemDelegate 类型),因为组件默认这些小部件是 Button 类型,内部 cast 成按钮来处理的。而且用按钮就不用自己处理下拉框 currentIndex,内部会自己处理,这也避免了我们在这个 delegate 对 currentIndex 赋值后导致其属性绑定失效的问题。

QQuickAction *QQuickMenu::actionAt(int index) const{    Q_D(const QQuickMenu);    QQuickAbstractButton *item = qobject_cast<QQuickAbstractButton *>(d->itemAt(index));    if (!item)        return nullptr;     return item->action();}

自定义的时候遇到一点状况,就是 PathView 替代 ListView 作为 Menu 的 contentItem 后,Menu 的 contentData 和 contentModel 始终会多一个表示高亮的 Item,这样环形路径就有个缺口,目前我只能将显示的 Item 个数减去一个来使显示效果正常。

    contentItem: PathView {        model: control.contentModel        //把PathView放Menu,会有一个高亮Item被放到contentModel,减去        pathItemCount: control.count > 0 ? control.count - 1 : 0        //... ...    }

Qt5中QML如何自定义环形菜单/环形选择框

 主要代码:

import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12 Window {    width: 640    height: 480    visible: true    title: qsTr("PathView")     Row {        anchors.centerIn: parent        spacing: 20         MyComboBox {            model: 10        }         Button {            width: 60            height: 30            text: "menu"            background: Rectangle {                radius: 15                color: "red"                border.color: "black"            }            onClicked: {                menu.popup()            }             MyMenu {                id: menu                anchors.centerIn: parent                Action { text: "1" }                Action { text: "2" }                Action { text: "3" }                Action { text: "4" }                Action { text: "5" }                Action { text: "6" }                Action { text: "7" }                Action { text: "8" }                Action { text: "9" }                Action { text: "10" }            }        }    }}
import QtQuick 2.12import QtQuick.Controls 2.12 //环形选择框//龚建波 2022-03-13//note:弹框为pop会被限制在window内ComboBox {    id: control     implicitWidth: 30    implicitHeight: 30    opacity: 0.9999     delegate: ItemDelegate {        width: 30        height: width        padding: 0        background: Rectangle {            radius: width / 2            color: "green"            border.color: "black"        }        contentItem: Text {            text: modelData            padding: 0            verticalAlignment: Text.AlignVCenter            horizontalAlignment: Text.AlignHCenter        }    }    contentItem: Text {        text: control.displayText        padding: 0        verticalAlignment: Text.AlignVCenter        horizontalAlignment: Text.AlignHCenter    }    indicator: null    background: Rectangle {        radius: 15        color: "green"        border.color: "black"    }    popup: Popup {        id: pop        width: 200        height: width        anchors.centerIn: parent        margins: 0        padding: 0        //pathview环形的角度范围和延申半径        property int angle: 1        property int spread: 1        //pop弹出和隐藏时的过渡动画        enter: Transition {            ParallelAnimation {                NumberAnimation { property: "angle"; from: 1; to: 360; duration: 500 }                NumberAnimation { property: "spread"; from: 1; to: 100; duration: 500 }            }        }        exit: Transition {            ParallelAnimation {                NumberAnimation { property: "angle"; from: 360; to: 1; duration: 500 }                NumberAnimation { property: "spread"; from: 100; to: 1; duration: 500 }            }        }        background: Item { }        contentItem: PathView {            model: control.popup.visible ? control.delegateModel : null            //currentIndex: control.highlightedIndex            //highlightRangeMode: PathView.NoHighlightRange            interactive: false            path: Path {                //一个圆环路径                PathAngleArc {                    centerX: 100; centerY: 100                    radiusX: pop.spread; radiusY: pop.spread                    moveToStart: true                    startAngle: 0                    sweepAngle: pop.angle                }            }        }    }}
import QtQuick 2.12import QtQuick.Controls 2.12 //环形菜单//龚建波 2022-03-13//note:弹框为pop会被限制在window内Menu {    id: control     implicitWidth: 250    implicitHeight: 250    margins: 0    padding: 0     //pathview环形的角度范围和延申半径    property int angle: 1    property int spread: 1    //pop弹出和隐藏时的过渡动画    enter: Transition {        ParallelAnimation {            NumberAnimation { property: "angle"; from: 1; to: 360; duration: 500 }            NumberAnimation { property: "spread"; from: 1; to: 100; duration: 500 }        }    }    exit: Transition {        ParallelAnimation {            NumberAnimation { property: "angle"; from: 360; to: 1; duration: 500 }            NumberAnimation { property: "spread"; from: 100; to: 1; duration: 500 }        }    }    delegate: MenuItem {        id: item        width: 30        height: width        padding: 0        spacing: 0        indicator: null        arrow: null        background: Rectangle {            radius: width / 2            color: "red"            border.color: "black"        }        contentItem: Text {            text: item.text            padding: 0            verticalAlignment: Text.AlignVCenter            horizontalAlignment: Text.AlignHCenter        }    }    contentItem: PathView {        implicitWidth: 250        implicitHeight: 250        model: control.contentModel        //把PathView放Menu,会有一个高亮Item被放到contentModel,减去        pathItemCount: control.count > 0 ? control.count - 1 : 0        //currentIndex: control.currentIndex        //highlightRangeMode: PathView.NoHighlightRange        interactive: false        path: Path {            //一个圆环路径            PathAngleArc {                centerX: 125; centerY: 125                radiusX: control.spread; radiusY: control.spread                moveToStart: true                startAngle: 0                sweepAngle: control.angle            }        }    }    background: Item { }}

以上就是关于“Qt5中QML如何自定义环形菜单/环形选择框”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Qt5中QML如何自定义环形菜单/环形选择框

本文链接: https://lsjlt.com/news/324739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Qt5中QML如何自定义环形菜单/环形选择框
    这篇“Qt5中QML如何自定义环形菜单/环形选择框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt5中QML如何自定义环形...
    99+
    2023-06-29
  • Qt5中QML自定义环形菜单/环形选择框的实现
    Qt5 中本身提供了扇形菜单 PieMenu,属于 QtQuick.Extras 模块,这个模块是拓展自 QtQuick.Control1 的,QtQuick.Control1 在 ...
    99+
    2024-04-02
  • Android中怎么自定义一个环形LoadingView效果
    这期内容当中小编将会给大家带来有关Android中怎么自定义一个环形LoadingView效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。控件实现:这个控件继承Rela...
    99+
    2024-04-02
  • win10如何自定义程序的图形性能首选项
    这篇文章将为大家详细讲解有关win10如何自定义程序的图形性能首选项,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法在桌面的空白处点击鼠标右键,在弹出的菜单中点击【显示设置】。依次点击【显示】选项卡&g...
    99+
    2023-06-10
  • 如何自定义Matplotlib库中柱形图的颜色
    Matplotlib是Python中常用的数据可视化库之一,它提供了丰富的绘图功能。在绘制柱形图时,我们可以通过改变颜色来增加图表的可读性和美观性。下面将详细介绍如何使用Matplotlib库来改变柱形图的颜色,并提供具体的代码...
    99+
    2024-01-17
  • javascript中如何自定义右键菜单插件
    这篇文章将为大家详细讲解有关javascript中如何自定义右键菜单插件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下1.使用方式js文件引入<scri...
    99+
    2024-04-02
  • 怎么在Android中通过自定义View实现一个环形进度条效果
    这篇文章给大家介绍怎么在Android中通过自定义View实现一个环形进度条效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。功能分析虽然功能比较简单,但是仍然需要仔细分析    ...
    99+
    2023-05-31
    android view roi
  • Android中Dialog如何自定义上下文花式菜单
    这篇文章主要为大家展示了“Android中Dialog如何自定义上下文花式菜单”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android中Dialog如何自定义上下文花式菜单”这篇文章吧。先自...
    99+
    2023-05-30
    android dialog
  • 如何在Android项目中自定义侧滑菜单栏
    本篇文章给大家分享的是有关如何在Android项目中自定义侧滑菜单栏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。自定义侧滑菜单的简单实现不少APP中都有这种侧滑菜单,例如QQ...
    99+
    2023-05-31
    android roi 目中
  • 如何在CentOS 7环境中自定义配置JDK
    本篇文章给大家分享的是有关如何在CentOS 7环境中自定义配置JDK,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。配置教程由于选择的是CentOS 7-DVD镜像自带了Ope...
    99+
    2023-05-31
    centos7 ce jdk
  • MySQL中如何通过循环实现自定义排序
    在MySQL中,可以通过循环实现自定义排序的方法是使用用户定义变量(user-defined variables)来实现。以下是一个...
    99+
    2024-04-30
    MySQL
  • 如何在Android中自定义一个圆环式进度条
    如何在Android中自定义一个圆环式进度条?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统...
    99+
    2023-06-14
  • 如何在Android中实现一个动画效果的自定义下拉菜单功能
    如何在Android中实现一个动画效果的自定义下拉菜单功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。要实现的功能及思路如下:下拉菜单样式是自定义的、非原生效果:需要使用...
    99+
    2023-06-06
  • PHP扩展开发:如何将自定义函数加载到PHP运行环境中?
    需要将自定义函数加载到php运行环境中,可以通过编写php扩展来实现。步骤如下:1. 使用c语言或汇编语言编写扩展模块,包含自定义函数的实现;2. 创建声明文件,声明函数列表和配置选项;...
    99+
    2024-05-15
    php 扩展开发 c语言
  • 微信公众平台开发中使用Java如何实现创建一个自定义菜单
    微信公众平台开发中使用Java如何实现创建一个自定义菜单?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我...
    99+
    2023-05-31
    java 自定义菜单
  • 如何实现CSS自定义select下拉选择框不用其他标签模拟且兼容多数浏览器
    这篇文章主要介绍“如何实现CSS自定义select下拉选择框不用其他标签模拟且兼容多数浏览器”,在日常操作中,相信很多人在如何实现CSS自定义select下拉选择框不用其他标签模拟且兼容多数浏览器问题上存在...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作