news 2026/4/15 9:58:19

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/4/14 13:19:16

揭秘C语言在存算一体芯片中的物理地址操控:5大关键技术彻底解析

第一章&#xff1a;C语言在存算一体芯片中物理地址操控的演进与挑战随着存算一体芯片架构的快速发展&#xff0c;传统冯诺依曼结构中的内存墙问题逐渐被突破。C语言作为底层系统开发的核心工具&#xff0c;在直接操控物理地址方面展现出不可替代的作用。其指针机制与内存映射能…

作者头像 李华
网站建设 2026/4/10 8:31:55

MMCV终极部署指南:2025年从零到精通的环境配置手册

MMCV终极部署指南&#xff1a;2025年从零到精通的环境配置手册 【免费下载链接】mmcv OpenMMLab Computer Vision Foundation 项目地址: https://gitcode.com/gh_mirrors/mm/mmcv 还在为MMCV安装过程中的版本冲突和环境配置而烦恼吗&#xff1f;你是否经历过花费数小时编…

作者头像 李华
网站建设 2026/4/8 11:18:03

5步构建企业级AI绘图平台:从零到一的智能图表生成实战

5步构建企业级AI绘图平台&#xff1a;从零到一的智能图表生成实战 【免费下载链接】next-ai-draw-io 项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io 还在为复杂的图表设计耗费大量时间吗&#xff1f;传统的绘图工具往往需要繁琐的操作步骤和专业技…

作者头像 李华
网站建设 2026/4/8 21:16:43

mnasnet_ms实战指南:突破移动端AI性能瓶颈的5大核心技术

mnasnet_ms实战指南&#xff1a;突破移动端AI性能瓶颈的5大核心技术 【免费下载链接】mnasnet_ms 轻量级网络MnasNet: Platform-Aware Neural Architecture Search for Mobile 项目地址: https://ai.gitcode.com/openMind/mnasnet_ms 在移动端AI应用日益普及的今天&…

作者头像 李华
网站建设 2026/4/12 7:36:29

Next AI Draw.io完整教程:用AI轻松绘制专业图表

Next AI Draw.io完整教程&#xff1a;用AI轻松绘制专业图表 【免费下载链接】next-ai-draw-io 项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io 在数字化工作环境中&#xff0c;AI图表生成工具正在彻底改变我们创建技术文档的方式。Next AI Draw.io…

作者头像 李华