QT:使用QStyle实现QMenu的滚动效果
项目中,使用QMenu,多个QAction时 超出页面范围,需要菜单栏可以上下滚动。
实际QMenu是带滚动的,但是要知道怎么使用 还是需要查看QT源码,现在简单记录下我的使用方法。
QT源码中:q->style()->styleHint(QStyle::SH_Menu_Scrollable, 0, q) 是支持滚动样式的,需要配置
void QMenuPrivate::init()
{QMenu * const q = q_func();Q_Q(QMenu);
#ifndef QT_NO_WHATSTHISq->setAttribute(Qt::WA_CustomWhatsThis);
#endifq->setAttribute(Qt::WA_X11NetWmWindowTypePopupMenu);defaultMenuAction = menuAction = new QAction(q);menuAction->d_func()->menu = q;QObject::connect(menuAction, &QAction::changed, [=] {if (!tornPopup.isNull())tornPopup->updateWindowTitle();});q->setMouseTracking(q->style()->styleHint(QStyle::SH_Menu_MouseTracking, 0, q));if (q->style()->styleHint(QStyle::SH_Menu_Scrollable, 0, q)) {scroll = new QMenuPrivate::QMenuScroller;scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone;}sloppyState.initialize(q);delayState.initialize(q);mousePopupDelay = q->style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q);
}
配置方法代码:
//跟进源码发现styleHint()是虚函数,需要自定义
#include <QtWidgets>
#include <QStyle>
class UProxyStyle:public QProxyStyle{ Q_OBJECT
int styleHint(StyleHint h, const QStyleOption *op = Q_NULLPTR,const QWidget *w = Q_NULLPTR, QStyleHintReturn *rd = Q_NULLPTR) const{printf("UMenu::styleHint %d\n",h);switch(h){ //以下设置的效果见图13-12的讲解case QStyle::SH_ScrollBar_LeftClickAbsolutePosition: return true;case QStyle::SH_ScrollBar_MiddleClickAbsolutePosition:return true;case QStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl: return false; case QStyle::SH_Menu_Scrollable: return true;/*这一句是关键,返回true,表明支持*/ }return QProxyStyle::styleHint(h,op,w); }
};//实际QMenu的使用QMenu* m_viewMenu = new QMenu();int i = 0;for(i = 0; i < 20; i++){QAction* m_Action1 = new QAction(QStringLiteral("测试")+i, m_viewMenu);m_viewMenu->addAction(m_Action1);}// 启用滚动菜单的样式提示m_viewMenu->setStyle(new UProxyStyle());
实际使用不麻烦,可惜我最开始没看源码,盲人摸象 耽误了很多时间,还是源码最靠谱!
QStyle 还有更多样式,可以查查相关文章
相关文章:
QT:使用QStyle实现QMenu的滚动效果
项目中,使用QMenu,多个QAction时 超出页面范围,需要菜单栏可以上下滚动。 实际QMenu是带滚动的,但是要知道怎么使用 还是需要查看QT源码,现在简单记录下我的使用方法。 QT源码中:q->style()->style…...
双指针问题——求只包含两个元素的最长连续子序列(子数组)
一,题目描述 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必…...
Unity组件开发--短连接HTTP
1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…...
真正的强大,原来是不动声色的
当一个人走过了绝境,他就会发现,真正的强大,原来是不动声色的。 他会停止一切自证,不再解释,话越来越少,眼神越来越坚定。 他不再模棱两可,唯唯诺诺,而是敢于断然拒绝,…...
git 查看tag和创建tag以及上传tag命令
文章目录 git 查看tag和创建tag以及上传tag命令git tagtag操作常用命令 git 查看tag和创建tag以及上传tag命令 git tag 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。 Git 的 tag 功能是一个非常有用…...
代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差
代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差 题目描述解题思路 & 代码实现递归法迭代法 题目描述 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例&#…...
【Linux】Linux 系统编程——tree 命令
文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…...
Android简单控件
1.文本显示 设置文本内容的两种方式: 在XML文件中通过属性 android:text 设置文本 <resources><string name"app_name">chapter03</string><string name"hello">你好,世界</string> </resources&…...
【Java 干货教程】Java实现分页的几种方式详解
一、前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式,特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的,(根据业务场景且仅仅只能用于数据量…...
关于Python里xlwings库对Excel表格的操作(三十一)
这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置绘图区外框线型、颜色、粗细及填充颜色】。前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安…...
QML使用QCustomPlot笔记
这里在QML中使用QCustomPlot是定义一个继承自QQuickPaintedItem的类,它包含一个QCustomPlot对象,在paint函数中将这个对象转化为pixmap绘制到布局中显示。 在QML中使用QT的Widget控件也可以借鉴这个思路实现 顺便记录一下QCustomPlot的简单设置与使用。…...
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 对所有关系数据的操作都只有CRUD,采用Go 的接口interface{}重构代码…...
《NLP入门到精通》栏目导读
一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》,因此,读者需要一定得深度学习基础,才能过度到此栏目内容。 二、博客建设理念 本博客基地&am…...
C++学习笔记——类继承
目录 一、一个简单的基类 1.1封装性 1.2继承性 1.3虚函数 1.4多态性 二、基类 2.1一个简单的C基类的示例 2.2 Animal是一个基类。 三、继承 3.1概念 3.2is-a关系 3.3多态公有继承 3.4静态联编和动态联编 3.5访问控制 3.6ABC理念 一、一个简单的基类 C中的基类是一…...
ARCGIS PRO SDK 使用条件管理 Pro UI
ARCGIS PRO UI简单介绍以下: 第一步:在Config.daml中在</AddInfo>标签下加上条件<conditions>标签(必须添加的) <conditions><!-- 定义条件 ,此处定义了两个--Tab 另一个为 group><insert…...
Halcon经典的边缘检测算子Sobel/Laplace/Canny
Halcon经典的边缘检测算子 文章目录 Halcon经典的边缘检测算子1. Sobel算子2. Laplace 算子3. Canny 算子4. 总结 关于边缘检测,有许多经典的算子,各大图形处理库都有各自的边缘检测算子,这里简要介绍几种。 1. Sobel算子 Sobel算子结合了高…...
用单片机设计PLC电路图
自记: 见另一篇文章,MOS驱动差了一个充电电容,栅极电容充电会有问题; 光耦用的直插,但板子用的贴片,此文档仅供参考 基本列出了PCB板情况,基础元器件,部分连接,原理等…...
【设计模式-6】建造者模式的实现与框架中的应用
建造者模式又被成为生成器模式,是一种使用频率比较低,相对复杂的创建型模式,在很多源码框架中可以看到建造者的使用场景,稍后我们会在本文末尾展示几个框架的使用案例。 建造者模式所构造的对象通常是比较复杂而且庞大的&#x…...
PositiveSSL和Sectigo的多域名证书
首先,我们要知道PositiveSSL是Sectigo旗下的子品牌,提供多种类型的SSL数字证书,包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富,不仅有DV基础型多域名SSL证书,还有OV企业型以及EV增强型的多域名SSL证…...
Docker:docker exec命令简介
介绍 docker exec [OPTIONS] 容器名称 COMMAND [ARG...] OPTIONS说明: -d,以后台方式执行命令; -e,设置环境变量 -i,交互模式 -t,设置TTY -u,用户名或UID,例如myuser:myu…...
python vue医院健康体检系统
目录技术选型与架构设计核心模块划分关键功能实现安全与合规措施部署方案开发里程碑计划项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 后端采用Python的Django框架,提供RESTful API接口。Djan…...
告别AP离线!深入浅出解析神州数码AC/AP注册机制:二层发现 vs. DHCP Option 43实战选型
神州数码无线网络部署实战:AC与AP注册机制深度解析 在企业无线网络部署中,AC(无线控制器)与AP(无线接入点)的注册机制是构建稳定无线网络的基础环节。神州数码作为国内领先的网络设备提供商,其A…...
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星
告别黑苹果配置噩梦:5大核心优势让开源工具OpCore-Simplify成为新手救星 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置一直是…...
新手必看!5款热门单片机选型指南(51、STM32、PIC、AVR、MSP430)
新手工程师必读:5大单片机选型实战指南(51/STM32/PIC/AVR/MSP430) 第一次打开单片机选型手册时,密密麻麻的参数表就像天书——时钟频率、Flash容量、ADC精度这些术语在眼前跳动,而老板给的采购预算表上的数字又让人手…...
G-Helper:华硕笔记本轻量级硬件控制开源工具全解析
G-Helper:华硕笔记本轻量级硬件控制开源工具全解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: …...
CentOS 7 无线网卡“失踪”排查指南:从驱动到NetworkManager的全面诊断
1. 无线网卡消失的常见症状与初步检查 当你打开CentOS 7准备连接Wi-Fi时,突然发现系统提示"No Wi-Fi Adapter found",这种突如其来的网络"失踪"问题确实让人头疼。作为系统管理员,我遇到过太多次类似情况,有时…...
开源工具OptiScaler:突破显卡限制的跨平台上采样解决方案
开源工具OptiScaler:突破显卡限制的跨平台上采样解决方案 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler OptiScaler是…...
嵌入式开发必备:rootfs.img镜像修改的5个常见问题与解决方案
嵌入式开发实战:rootfs.img镜像修改的五大核心问题与深度解决方案 在嵌入式Linux开发中,rootfs.img镜像的修改是每个开发者绕不开的关键环节。无论是添加自定义配置文件、更新系统组件,还是优化启动流程,对根文件系统的调整都直接…...
4大价值点:旧设备复活开源工具如何让经典iOS设备重获新生?
4大价值点:旧设备复活开源工具如何让经典iOS设备重获新生? 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-…...
告别官方开发板:手把手教你为自制的RK3568板卡移植Linux系统(Ubuntu 18.04环境)
从零构建:自制RK3568开发板的Linux系统深度移植实战 当一块自制的RK3568开发板静静躺在工作台上,没有官方文档支持,没有现成的配置文件,这才是真正考验工程师功底的时刻。不同于使用官方开发板的"开箱即用",…...
