qt QProxyStyle详解
1、概述
QProxyStyle
是Qt框架中QStyle
类的一个子类,它提供了一种代理机制,允许开发者在不直接修改现有样式(QStyle
)实现的情况下,对样式行为进行定制或扩展。通过继承QProxyStyle
,开发者可以重写其虚方法,以在调用基类样式方法之前或之后添加自定义行为。
QProxyStyle
通常用于以下场景:
- 自定义绘制:在控件绘制过程中添加额外的绘制逻辑。
- 样式调整:修改控件的尺寸、边距、填充等样式属性。
- 事件过滤:在控件的事件处理过程中插入自定义逻辑。
2、重要方法
QProxyStyle
继承自QStyle
,因此它拥有QStyle
的所有方法。但是,作为代理样式,QProxyStyle
的主要价值在于它允许重写这些方法,以在调用基类实现之前或之后添加自定义行为。以下是一些可能被重写的方法:
- drawControl():绘制控件,如按钮、滑块等。
- drawPrimitive():绘制基本图形元素,如边框、背景等。
- drawComplexControl():绘制复杂的控件,如组合框、滑块控件等。
- pixelMetric():返回控件的某个尺寸属性,如边距、图标大小等。
- sizeFromContents():根据控件的内容计算控件的大小。
- styleHint():返回与样式相关的提示信息,如控件的默认边距、对齐方式等。
- polish():对控件进行最后的调整,如设置字体、颜色等。
- unpolish():撤销
polish()
方法所做的调整。
3、重要信号
QProxyStyle
本身并不定义任何新的信号。它继承自QStyle
,而QStyle
是一个无信号的类。但是,使用QProxyStyle
的控件(如QWidget
)可能会发出信号,这些信号与控件的状态变化或用户交互相关。例如,一个按钮在被点击时会发出clicked()
信号。
4、常用枚举类型
QProxyStyle
继承自QStyle
,因此它使用QStyle
定义的所有枚举类型。这些枚举类型用于描述控件的状态、绘制元素的类型、样式提示等。以下是一些常用的枚举类型:
- ControlElement:描述要绘制的控件元素,如按钮、滑块、复选框等。
- PrimitiveElement:描述要绘制的基本图形元素,如边框、背景、焦点矩形等。
- ComplexControl:描述要绘制的复杂控件,如组合框、选项卡栏等。
- PixelMetric:描述控件的某个尺寸属性,如边距、图标大小、滚动条宽度等。
- StyleHint:提供与样式相关的提示信息,如控件的默认边距、对齐方式、字体设置等。
#include <QApplication>
#include <QProxyStyle>
#include <QPushButton>
#include <QStyleOptionButton>
#include <QWidget>// 自定义代理样式类
class CustomProxyStyle : public QProxyStyle {
public:CustomProxyStyle(QStyle* style = nullptr) : QProxyStyle(style) {}// 重写绘制按钮的方法void drawControl(ControlElement element, const QStyleOption* option,QPainter* painter, const QWidget* widget = nullptr) const override {if (element == CE_PushButton) {const QStyleOptionButton* buttonOption = qstyleoption_cast<const QStyleOptionButton*>(option);// 保存painter状态painter->save();// 自定义按钮外观painter->setPen(Qt::red);painter->setBrush(Qt::yellow);painter->drawRoundedRect(option->rect, 10, 10);// 绘制文本if (buttonOption->text.length() > 0) {painter->setPen(Qt::blue);painter->drawText(option->rect, Qt::AlignCenter, buttonOption->text);}painter->restore();} else {// 其他控件使用默认样式QProxyStyle::drawControl(element, option, painter, widget);}}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口QWidget window;window.setFixedSize(300, 200);// 创建按钮QPushButton* button = new QPushButton("Custom Style Button", &window);button->setGeometry(50, 50, 200, 50);// 应用自定义样式CustomProxyStyle* style = new CustomProxyStyle(button->style());button->setStyle(style);window.show();return app.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!
相关文章:

qt QProxyStyle详解
1、概述 QProxyStyle是Qt框架中QStyle类的一个子类,它提供了一种代理机制,允许开发者在不直接修改现有样式(QStyle)实现的情况下,对样式行为进行定制或扩展。通过继承QProxyStyle,开发者可以重写其虚方法&…...

AWS CLI 操作指南
AWS CLI 操作指南 世间本来就存在许多乐境,只是现代人为世间所累而未能予以关注,也就失去了许多体验乐境的机会。比如,忙里偷闲看云,以悠闲的心看悠闲的云,便是一种极妙的乐境。 本文将介绍如何配置 AWS CLI࿰…...

海盗王用golang重写的AccountServer功能
自从用golang重写了海盗王的网关gateserver以来,一直想把accountserver也重写了,但是一直没有进行。 趁上次刚写好那个golang版的更新器,还有些熟悉,于是把原来AccountServer的C代码重写读了个大概。它原版的写得太过于复杂&#…...
如何保证spring boot应用程序的安全性?
保证Spring Boot应用程序的安全性是至关重要的,以下是小编为大家列举的一些关键措施和最佳实践: 文章目录 1. 使用Spring Security2. 安全配置3. 数据加密4. 凭证管理5. 输入验证6. 异常处理7. 定期更新依赖8. 日志监控9. 审计日志10. 安全培训 1. 使用S…...
力扣 岛屿数量-200
岛屿数量-200 class Solution {//深度优先搜索 dfs public:int vis[300][300] {0};//用于标记的数组,标记是否遍历过int cnt 0;//岛屿计数//上下左右的移动方向数组int dx[4]{-1,1,0,0};int dy[4]{0,0,-1,1};//深度优先搜索void dfs(vector<vector<char>…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

十二、正则表达式、元字符、替换修饰符、手势和对话框插件、字符串截取
1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…...

【信息系统项目管理师】第3章:信息系统治理 考点梳理
文章目录 3.1 IT 治理3.1.1 IT治理基础3.1.2 IT治理体系3.1.3 IT治理任务3.1.4 IT治理方法与标准 3.2 IT 审计3.2.1 IT审计基础3.2.2 审计方法与技术3.2.3 审计流程3.2.4 审计内容 3.1 IT 治理 IT治理起到重要的统筹、评估、指导和监督作用。 信息技术审计(IT审计)作为与IT治…...
实现对图片或者视频增加隐藏水印和提取水印
好久好久没有写博客了,最近看见一个很有意思的文章:小心你的电脑被窃听,就是说在一些公司,截图都会存在水印,方便溯源,然后出于技术的好奇,我在github上搜了一下,还真有相关的github…...
uniapp配置全局消息提醒
1.H5使用根标签插入dom的方式实现。 2.app端使用plus.nativeObj.View的方式绘制实现 H5端app端 H5端 创建组件orderAlert.vue <template><div class"view"><div class"content" v-if"visible"><div class"message&q…...
卸载snap docker一直卡住:Save data of snap “docker“ in automatic snapshot set #3
在卸载 Snap 安装的 Docker 时卡住,通常是因为 Snap 在执行卸载时会先尝试保存一些快照(自动或手动创建的),并且该过程可能因某些原因而卡住。为了解决这个问题,你可以按照以下步骤强制删除 Snap 安装的 Docker&#x…...
python学习——字典元素的访问和遍历
在Python中,访问和遍历字典元素的方法如下: 文章目录 访问字典元素1. 使用键来访问值2. 使用 get() 方法 遍历字典元素1. 遍历字典的键2. 遍历字典的值3. 遍历字典的键和值4. 使用列表推导式来创建新的列表 实操 访问字典元素 1. 使用键来访问值 # 创…...

数据结构基础之《(9)—归并排序》
一、什么是归并排序 1、整体是递归,左边排好序右边排好序merge让整体有序 2、让其整体有序的过程里用了排外序方法 3、利用master公式来求解时间复杂度 4、当然可以用非递归实现 二、归并排序说明 1、首先有一个f函数 void f(arr, L, R) 说明:在arr上…...

【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积
在全连接神经网络中,每个神经元都和上一层的所有神经元彼此连接,这会导致网络的参数量非常大,难以实现复杂数据的处理。为了改善这种情况,卷积神经网络应运而生。 一、卷积 在信号处理中,卷积被定义为一个函数经过翻转…...

远程视频验证如何改变商业安全
如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…...

电脑启动需要经历哪些过程?
传统BIOS启动流程 1. BIOS BIOS 启动,BIOS程序是烧进主板自带的ROM里的,所以无硬盘也可以启动。BIOS先进行自检,检查内存、显卡、磁盘等关键设备是否存在功能异常,会有蜂鸣器汇报错误,无错误自检飞快结束。 硬件自检…...

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
前言 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。…...

postman使用正则表达式提取数据实战篇!
之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联,match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中ÿ…...
ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题
报错 [root@localhost ~]# ipmitool -H 10.1.2.41 -I lan -U admin -P "password123" lan print 1 Get Session Challenge command failed Error: Unable to establish LAN session Error: Unable to establish IPMI v1.5 / RMCP session [root@localhost ~]# ipmit…...
AWS EC2设置用户名密码登录
使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具,通过SSH连…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...