news 2026/9/5 23:47:54

QMenu+QSS菜单美化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QMenu+QSS菜单美化

QMenu有多个伪状态:

:selected 鼠标停留

:default 默认选中

:exclusive 单选组

:non-exclusive 非单选组

多个子控件

::item 菜单项

::indicator 指示器

::separator 分割线

::tearoff 撕裂器

::right-arrow 右箭头

::left-arrow 左箭头

::scroller 滚动条

window环境下没出来调出来滚动条和左箭头所以暂且跳过吧

且看图示说明:

一、高对比示例

QSS:

QMenu::item:selected{ background-color: #FF7F00; } QMenu::item:default{ background-color: #FFFF00; } QMenu::item:exclusive:checked{ background-color: #00FF00; } QMenu::item:exclusive:unchecked{ background-color: #00FFFF; } QMenu::item:non-exclusive:checked{ background-color: #0000FF; } QMenu::item:non-exclusive:unchecked{ background-color: #8B00FF; } QMenu::indicator{ background-color: red; } QMenu::separator { background: lightblue; } QMenu::tearoff{ background: #FF1493; } QMenu::scroller{ background: #8B4513; } QMenu::right-arrow{ background: black; }

菜单代码:

QAction* act; QMenu* menu = new QMenu(this); menu->setTearOffEnabled(true); QActionGroup* g1= new QActionGroup(this); g1->setExclusive(true); QMenu *subMenu1 = new QMenu("查看", this); act = subMenu1->addAction("大图标"); act->setCheckable(true); act->setChecked(true); act->setActionGroup(g1); act = subMenu1->addAction("中图标"); act->setCheckable(true); act->setActionGroup(g1); act = subMenu1->addAction("小图标"); act->setCheckable(true); act->setActionGroup(g1); subMenu1->addSeparator(); QActionGroup* g2= new QActionGroup(this); g2->setExclusive(false); act = subMenu1->addAction("自动排列"); act->setCheckable(true); act->setChecked(true); act->setActionGroup(g2); act = subMenu1->addAction("将图标与网格对齐"); act->setCheckable(true); act->setActionGroup(g2); menu->addMenu(subMenu1); menu->addAction("排序方式"); act = menu->addAction("刷新"); menu->setDefaultAction(act); menu->addSeparator(); menu->addAction("撤销复制\tCtrl+Z"); QMenu *subMenu2 = new QMenu("新建", this); subMenu2->setProperty("_q_menu_scrollable", true); subMenu2->addSection("文档类型"); subMenu2->addAction("word文档"); subMenu2->addAction("文本文档"); subMenu2->addSection("压缩类型"); subMenu2->addAction("tar文件"); subMenu2->addAction("rar文件"); subMenu2->addAction("zip文件"); subMenu2->addSection("其它类型"); for(int i=0; i<50;i++) subMenu2->addAction(QString("其它%1").arg(i)); menu->addMenu(subMenu2); menu->addSeparator(); menu->addAction("显示设置"); menu->addAction("个性化"); menu->exec(QCursor().pos());

二、 简约样式示例

QMenu { background-color: #ffffff; color: #333333; border: 1px solid #cccccc; padding: 6px 0; } QMenu::item { padding: 7px 30px 7px 18px; margin: 0 6px; } QMenu::item:selected { background-color: #e3f2fd; color: #1976d2; } QMenu::item:disabled { color: #b0b0b0; } QMenu::separator { height: 1px; background-color: #e0e0e0; margin: 5px 10px; }

三、 自定义阴影

关键代码设置

//自定义阴影 void setMenuShadow(QMenu* menu) { menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint); menu->setAttribute(Qt::WA_TranslucentBackground, true); QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; shadow->setColor(QColor(255, 0, 0, 80)); shadow->setBlurRadius(10); shadow->setOffset(4, 4); menu->setGraphicsEffect(shadow); }

QSS增加margin设置:

四、 菜单添加控件

只是把一个原始QLineEdit控件塞进去,

那么怎么实现把它塞进菜单中呢?

QWidgetAction *waction = new QWidgetAction(0); QLineEdit* edit = new QLineEdit; edit->setFixedHeight(32); edit->setPlaceholderText("请输入你的名字"); edit->setClearButtonEnabled(true); waction->setDefaultWidget(edit); menu->addAction(waction);

看,只需要用QWidgetAction包装下就好。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 4:35:44

C语言union使用技巧:内存复用的高效玩法

在C语言的自定义类型家族中&#xff0c;struct&#xff08;结构体&#xff09;早已是大家耳熟能详的“老熟人”&#xff0c;而它的“孪生兄弟”union&#xff08;共用体/联合体&#xff09;却常常被忽略。 很多初学者觉得union“无用且危险”&#xff0c;实则是没掌握它的核心…

作者头像 李华
网站建设 2026/9/3 7:36:33

第11篇 | 现代密码学应用:加密、签名与密钥管理的实践指南

《网络安全的攻防启示录》 第二篇章:固守之道 第11篇 “密码学不是只会算数的魔法师,而是数字世界里恪尽职守的保安队长。” 你以为的“安全”,可能只是“错觉” 你有没有过这种经历? 作为一名开发者或架构师,你看着自己的系统:全站已经上了 HTTPS,浏览器地址栏那个…

作者头像 李华
网站建设 2026/9/2 23:24:14

MnasNet技术演进深度解析:从移动端AI困境到MindSpore架构革命

在移动端AI应用爆发的2025年&#xff0c;模型精度、推理速度和体积压缩的三重困境依然是技术落地的核心挑战。mnasnet_ms作为MnasNet技术路线的现代实现&#xff0c;通过MindSpore框架重构和硬件感知优化&#xff0c;为边缘计算场景提供了全新的解决方案。 【免费下载链接】mna…

作者头像 李华
网站建设 2026/9/4 2:28:07

Hydro在线评测系统竞赛管理完全指南:从新手到专家的实战手册

Hydro在线评测系统竞赛管理完全指南&#xff1a;从新手到专家的实战手册 【免费下载链接】Hydro Hydro - Next generation high performance online-judge platform - 新一代高效强大的信息学在线测评系统 (a.k.a. vj5) 项目地址: https://gitcode.com/gh_mirrors/hy/Hydro …

作者头像 李华
网站建设 2026/9/3 3:37:10

Medical Transformer终极指南:3步掌握医学图像分割神器

Medical Transformer终极指南&#xff1a;3步掌握医学图像分割神器 【免费下载链接】Medical-Transformer Official Pytorch Code for "Medical Transformer: Gated Axial-Attention for Medical Image Segmentation" - MICCAI 2021 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/9/3 7:36:27

MASt3R:重新定义3D重建与图像匹配的终极指南

想要从2D图像中快速构建3D场景吗&#xff1f;MASt3R项目正是你需要的答案&#xff01;这个革命性的开源工具利用深度学习技术&#xff0c;将图像匹配提升到了全新维度&#xff0c;让3D重建变得前所未有的简单高效。无论你是计算机视觉爱好者还是专业开发者&#xff0c;都能在几…

作者头像 李华