当前位置: 首页 > news >正文

QMenu风格设计qss+阴影

Qt的菜单经常在软件开发中用到,默认的菜单效果都不符合设计师的要求,本篇介绍QMenu菜单的风格设计,包括样式表和阴影。

1.QMenu样式表的设计

首先看一个默认的菜单

void QGraphicsDropShadowEffectDemo::slotShowDialog()
{qDebug() << "slotShowDialog================================";QMenu menu;QAction *m_actionCut = menu.addAction(QStringLiteral("剪切"));QAction *m_actionCopy = menu.addAction(QStringLiteral("复制"));QAction *m_actionPaster = menu.addAction(QStringLiteral("粘贴"));m_actionPaster->setEnabled(true);QPoint point = mapToGlobal(ui->pushButton->pos());point += QPoint(2, 30);menu.exec(point);
}

添加qss风格

QString strMenuStyle = QString("QMenu{background-color:#FFFFFF;border-radius:5px;margin:10px 10px 10px 10px;}""QMenu::item{color:#333333;height:24px;background-color:#FFFFFF;border-radius:5px;border:1px solid #FFFFFF;font-size:12px;padding:3px 10px 3px 10px;margin:3px 10px 3px 10px;}""QMenu::item:selected{background-color:#2F89FC;color:#FFFFFF;}""QMenu::item:pressed{background-color:#2F89FC;color:#FFFFFF;}""QMenu::item:!enabled{background-color:#666666;color:#FFFFFF;}");
menu.setStyleSheet(strMenuStyle);

运行效果

这种弹出的没有凹凸感,需要添加阴影,阴影一般情况下有两种方法,一种是自已绘制,另一种是采用QGraphicsDropShadowEffect实现,绘制的之前试了,没有效果,因此这里采用QGraphicsDropShadowEffect的方式实现。

    QMenu menu;menu.setWindowFlags(this->windowFlags()  | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);menu.setAttribute(Qt::WA_TranslucentBackground);QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);shadow->setOffset(0, 0);shadow->setColor(QColor("#333333"));shadow->setBlurRadius(10);menu.setGraphicsEffect(shadow);

setBlurRadius里的10一定要写qss里的margin:10px 10px 10px 10px;对应,否则没有校果

这样带阴影的效果明显好很多。

如果有多个菜单使用,可以把这个自定义为一个菜单类。

#ifndef CUSTOMMENU_H
#define CUSTOMMENU_H#include <QMenu>class CustomMenu: public QMenu
{
public:CustomMenu(int paddingLeft = 20, int paddingRight = 20, QWidget *parent = nullptr);};#endif // CUSTOMMENU_H
#include "custommenu.h"
#include <QPainter>
#include <QPainterPath>
#include <QGraphicsDropShadowEffect>
#include <QtMath>
#include <QDebug>CustomMenu::CustomMenu(int paddingLeft, int paddingRight, QWidget *parent) : QMenu(parent)
{this->setWindowFlags(this->windowFlags()  | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);this->setAttribute(Qt::WA_TranslucentBackground);QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);shadow->setOffset(0, 0);shadow->setColor(QColor("#333333"));shadow->setBlurRadius(10);this->setGraphicsEffect(shadow);QString strMenuStyle = QString("QMenu{background-color:#FFFFFF;border-radius:5px;margin:10px 10px 10px 10px;}""QMenu::item{color:#333333;height:24px;background-color:#FFFFFF;border-radius:4px;border:1px solid #FFFFFF;font-size:12px;padding:3px %1px 3px %2px;margin:3px 10px 3px 10px;}""QMenu::item:selected{background-color:#2F89FC;color:#FFFFFF;}""QMenu::item:pressed{background-color:#2F89FC;color:#FFFFFF;}""QMenu::item:!enabled{background-color:#999999;color:#FFFFFF;}").arg(paddingRight).arg(paddingLeft);this->setStyleSheet(strMenuStyle);
}

使用

void QGraphicsDropShadowEffectDemo::slotShowDialog()
{qDebug() << "slotShowDialog================================";CustomMenu menu(20, 20);
//    QAction *m_actionAdd = new QAction(QIcon(":/images/menu_add.png"), QStringLiteral("添加"));
//    QAction *m_actionDelete = new QAction(QIcon(":/images/menu_delete.png"), QStringLiteral("删除"));//menu.addAction(m_actionAdd);//menu.addAction(m_actionDelete);QAction *m_actionCut = menu.addAction(QStringLiteral("剪切"));QAction *m_actionCopy = menu.addAction(QStringLiteral("复制"));QAction *m_actionPaster = menu.addAction(QStringLiteral("粘贴"));m_actionPaster->setEnabled(true);QPoint point = mapToGlobal(ui->pushButton->pos());point += QPoint(2, 30);menu.exec(point);
}

相关文章:

QMenu风格设计qss+阴影

Qt的菜单经常在软件开发中用到&#xff0c;默认的菜单效果都不符合设计师的要求&#xff0c;本篇介绍QMenu菜单的风格设计&#xff0c;包括样式表和阴影。 1.QMenu样式表的设计 首先看一个默认的菜单 void QGraphicsDropShadowEffectDemo::slotShowDialog() {qDebug() <&l…...

temu防窒息警示语贴哪里

防窒息警示语标签的位置选择是确保消费者在购买和使用产品时能够注意到潜在窒息风险的重要一环。本文将为您介绍一些关于防窒息警示语标签贴在哪里的建议&#xff0c;以帮助您选择合适的位置。 先给大家推荐一款拼多多/temu运营工具——多多情报通 多多情报通是拼多多的生意参…...

Maven——坐标和依赖

Maven的一大功能是管理项目依赖。为了能自动化地解析任何一个Java构件&#xff0c;Maven就必须将它们唯一标识&#xff0c;这就依赖管理的底层基础——坐标。将详细分析Maven坐标的作用&#xff0c;解释其每一个元素&#xff1b;在此基础上&#xff0c;再介绍如何配置Maven&…...

Python中事务的常见用法

在Python中&#xff0c;可以使用数据库连接对象来执行事务操作。以下是一些常见的 Python 中事务的用法&#xff1a; 开始事务 要开始一个事务&#xff0c;你需要获取数据库连接对象&#xff0c;并调用其 begin() 或 start_transaction() 方法来开启一个事务。例如&#xff0…...

蛮力法最大值连续子序问题

概念: 在一个给定的整数数组中找到一个连续的子序列&#xff0c;使得子序列的元素之和最大 思路: 遍历所有可能的子序列&#xff0c;计算它们的和。 在每次计算过程中&#xff0c;记录当前最大的子序列和。 返回最大的子序列和作为结果。 代码: #include <iostream> #…...

多功能智能遥测终端机 5G/4G+北斗多信道 视频采集传输

计讯物联多功能智能遥测终端机&#xff0c;全网通5G/4G无线通信、弱信号地区北斗通信&#xff0c;多信道自动切换保障通信联通&#xff0c;丰富网络接口及行业应用接口&#xff0c;支持水利、环保、工业传感器、控制终端、智能终端接入&#xff0c;模拟量/数字量/信号量采集&am…...

1.查看表的基本结构,表的详细结构和修改表名

查看表的基本结构,表的详细结构和修改表名 1.查看数据表基本结构 有强迫症或健忘症的小伙伴们在建好数据库和表以后&#xff0c;通常会怀疑自己刚才是不是敲错了&#xff0c;怎么办&#xff1f;如果不是使用图形界面是不是就没法查看啦&#xff1f; 不存在的&#xff0c;这就…...

Mybatis实用教程之XML实现动态sql

系列文章目录 1、mybatis简介及数据库连接池 2、mybatis中selectOne的使用 3、mybatis简单使用 4、mybatis中resultMap结果集的使用 Mybatis实用教程之XML实现动态sql 系列文章目录前言1. 动态条件查询2. 动态更新语句3. 动态插入语句4、其他标签的使用 前言 当编写 MyBatis 中…...

混合App开发实现页面跳转(更新中)

util.js /*** 这个函数被用来获取 URL 中的查询参数&#xff0c;并将它们以对象&#xff08;键值对&#xff09;的形式返回* param {string} url* returns {object} oParams*/ export function getUrlQuery(url null) {let sUrl url || window.location.href;let oParams {…...

【FPGA】Verilog:BCD 加法器的实现

0x00 XOR 运算在 2 的补码加减法中的应用 2 的补码加减法的特点是&#xff0c;当从某个数中减去负数时&#xff0c;将其转换为正数的加法来计算&#xff0c;并将减去正数的情况转换为负数的加法来计算&#xff0c;从而将所有减法运算转换为加法运算。在这种情况下&#xff0c;…...

机器学习第15天:GBDT模型

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 GBDT模型介绍 Boosting 残差 GBDT的缺点 python代码实现 代码 模型参数解释 结语 GBDT模型介绍 GBDT&#xff08;Gradient Boos…...

STM32F407-14.3.9-01输出比较模式

输出比较模式 此功能用于控制输出波形&#xff0c;或指示已经过某一时间段。 当捕获/比较寄存器与计数器之间相匹配时&#xff0c;输出比较功能&#xff1a; ● 将为相应的输出引脚分配一个可编程值&#xff0c;该值由输出比较模式&#xff08;TIMx_CCMRx 寄存器中的 OCxM⑦…...

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 &#xff08;1&#xff09;状态表示 &#xff08;2&#xff09;状态转移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表顺序 &#xff08;5&#xff09;返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…...

CSS、JS文件无法正确加载至页面问题与解决

目录 1. 问题出现 2. 分析与解决 3. 总结 1. 问题出现 自己在写项目是时候&#xff0c;想启动浏览器查询首页面index.jsp的显示效果 预期效果应该是下面这样的&#xff1a; 但是实际上是这样的&#xff1a; 意思也就是说可能是关于CSS、JS相关的引入方面出了问题&#xff…...

ftp的服务安装配置

安装 yum install -y vsftpd # 是否安装成功 rpm -qa | grep vsftpd # 是否开机启动 systemctl list-unit-files | grep vsftpd # 开机启动 systemctl enable vsftpd.service # ftp端口 netstat -antup | grep ftp # 状态 service vsftpd status service vsftpd start service…...

原码,补码,反码(极简版)

原码补码反码 都有符号位&#xff0c;0表示正数&#xff0c;1表示负数 正数 正数的原码&#xff0c;补码&#xff0c;反码都相同 负数 负数的原码&#xff0c;最高位是1&#xff0c;其余的用正常二进制表示 负数的反码&#xff0c;对原码进行符号位不变&#xff0c;其余位…...

uniapp监听wifi连接状态

在uniapp中检测WiFi连接状态可以使用uni的API进行操作。 uni.onNetworkStatusChange((res) > { console.log(res)uni.getConnectedWifi({success: function(res) {console.log(已连接WIFI, res);},fail: function(err) {console.log(未连接WIFI, err);}}); }) 此函数将返回…...

2023年总结和2024年展望(以ue为主攻)

2023年就要过去了&#xff0c;总结下&#xff1a; 先说好的地方 1&#xff0c;pbr材质集成到了osg中&#xff0c;加上直接光和间接光。终于知道pbr咋回事了。光线追踪的视频也跟着敲了一个。 2&#xff0c;得到了认可。拿到了半年奖&#xff0c;leader让我明年和架构师一起进行…...

南京大学计算机学院面试准备

该内容是我面试南京大学计算机学院保研的时候的准备题目&#xff0c;最后是面试的时候问到的问题。 目录 1. 自我介绍2. 进程和线程的区别3. 循环引用4. 操作系统怎么利用多核&#xff1f;5. 英文介绍二叉搜索树6. 英文介绍二叉搜索树的时间复杂度7. 介绍 stackover flow8. 什…...

API成批分配漏洞介绍与解决方案

一、API成批分配漏洞介绍 批量分配&#xff1a;在API的业务对象或数据结构中&#xff0c;通常存在多个属性&#xff0c;攻击者通过篡改属性值的方式&#xff0c;达到攻击目的。比如通过设置user.is_admin和user.is_manager的值提升用户权限等级&#xff1b;假设某API的默认接口…...

电商运营数字密码解析:0.01、50、0、8.8背后的用户增长与转化逻辑

1. 项目概述&#xff1a;一次电商运营的“数字密码”破译最近在复盘一些头部品牌的电商运营案例时&#xff0c;CYPRESS天猫旗舰店的一组数字引起了我的注意&#xff1a;0.01、50、0、8.8。乍一看&#xff0c;这像是几个毫无关联的随机数&#xff0c;但当你把它们放在电商运营的…...

Raspberry Pi Imager终极指南:快速上手树莓派系统安装

Raspberry Pi Imager终极指南&#xff1a;快速上手树莓派系统安装 【免费下载链接】rpi-imager The home of Raspberry Pi Imager, a user-friendly tool for creating bootable media for Raspberry Pi devices. 项目地址: https://gitcode.com/gh_mirrors/rp/rpi-imager …...

从开发板到自研板:RK3568设备树移植与定制编译实战

1. RK3568设备树移植入门指南 第一次接触RK3568设备树移植的工程师&#xff0c;往往会被dts文件中密密麻麻的节点和属性搞得晕头转向。我刚开始做这块的时候&#xff0c;光是看那7000多行的代码就头疼。但其实只要掌握几个关键点&#xff0c;移植工作就会变得清晰很多。 设备树…...

CTP接口实战:从零构建量化交易系统(附完整源码)

1. CTP接口入门&#xff1a;量化交易的第一块基石 第一次接触CTP接口时&#xff0c;我盯着那堆C代码发呆了半小时——这玩意儿比我想象的复杂多了。后来才发现&#xff0c;其实把它理解成期货市场的普通话就简单了。就像我们用普通话跟人交流&#xff0c;程序用CTP接口跟期货交…...

从逻辑门到加法器:Verilog实现半加器与全加器的三种抽象层级

1. 项目概述&#xff1a;从逻辑门到加法器的数字世界基石在数字电路和芯片设计的入门路上&#xff0c;加法器是一个绕不开的经典课题。它不仅是算术逻辑单元&#xff08;ALU&#xff09;的核心组件&#xff0c;更是理解数字系统如何执行基本运算的关键。今天&#xff0c;我们不…...

终极M3U8视频下载神器:3步搞定加密流媒体!

终极M3U8视频下载神器&#xff1a;3步搞定加密流媒体&#xff01; 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-do…...

用STM32定时器中断做个呼吸灯吧:CubeMX+HAL库驱动LED渐变效果(正点原子F103)

STM32呼吸灯实战&#xff1a;用CubeMXHAL库实现PWM渐变效果 呼吸灯作为嵌入式开发的经典项目&#xff0c;不仅能直观展示PWM技术的魅力&#xff0c;更是理解定时器中断机制的绝佳案例。本文将带您从零开始&#xff0c;在正点原子STM32F103开发板上实现LED的平滑呼吸效果&#x…...

好用的昆明线上经营推广哪家好选

在数字化浪潮席卷的当下&#xff0c;昆明的企业和商家们越来越意识到线上经营推广的重要性。选择一家靠谱的线上经营推广公司&#xff0c;能够让企业在激烈的市场竞争中脱颖而出。那么&#xff0c;在昆明众多的推广公司中&#xff0c;哪家才是比较好的选择呢&#xff1f;今天&a…...

taotoken token plan套餐为长期项目带来的成本控制优势

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken Token Plan套餐为长期项目带来的成本控制优势 在持续进行AI功能开发的软件项目中&#xff0c;模型API的调用成本是研发预…...

用操作系统类比彻底搞懂 AI Agent:进程、系统调用与上下文窗口

用操作系统类比彻底搞懂 AI Agent&#xff1a;进程、系统调用与上下文窗口 引言 很多人第一次接触 AI Agent&#xff0c;会立刻被一堆新词包围&#xff1a;Tool Use、Function Calling、RAG、Memory、Orchestrator、Multi-Agent、Context Compression。 这些词看起来很新&#…...