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

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类的一个子类&#xff0c;它提供了一种代理机制&#xff0c;允许开发者在不直接修改现有样式&#xff08;QStyle&#xff09;实现的情况下&#xff0c;对样式行为进行定制或扩展。通过继承QProxyStyle&#xff0c;开发者可以重写其虚方法&…...

AWS CLI 操作指南

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

海盗王用golang重写的AccountServer功能

自从用golang重写了海盗王的网关gateserver以来&#xff0c;一直想把accountserver也重写了&#xff0c;但是一直没有进行。 趁上次刚写好那个golang版的更新器&#xff0c;还有些熟悉&#xff0c;于是把原来AccountServer的C代码重写读了个大概。它原版的写得太过于复杂&#…...

如何保证spring boot应用程序的安全性?

保证Spring Boot应用程序的安全性是至关重要的&#xff0c;以下是小编为大家列举的一些关键措施和最佳实践&#xff1a; 文章目录 1. 使用Spring Security2. 安全配置3. 数据加密4. 凭证管理5. 输入验证6. 异常处理7. 定期更新依赖8. 日志监控9. 审计日志10. 安全培训 1. 使用S…...

力扣 岛屿数量-200

岛屿数量-200 class Solution {//深度优先搜索 dfs public:int vis[300][300] {0};//用于标记的数组&#xff0c;标记是否遍历过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 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐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治…...

实现对图片或者视频增加隐藏水印和提取水印

好久好久没有写博客了&#xff0c;最近看见一个很有意思的文章&#xff1a;小心你的电脑被窃听&#xff0c;就是说在一些公司&#xff0c;截图都会存在水印&#xff0c;方便溯源&#xff0c;然后出于技术的好奇&#xff0c;我在github上搜了一下&#xff0c;还真有相关的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 时卡住&#xff0c;通常是因为 Snap 在执行卸载时会先尝试保存一些快照&#xff08;自动或手动创建的&#xff09;&#xff0c;并且该过程可能因某些原因而卡住。为了解决这个问题&#xff0c;你可以按照以下步骤强制删除 Snap 安装的 Docker&#x…...

python学习——字典元素的访问和遍历

在Python中&#xff0c;访问和遍历字典元素的方法如下&#xff1a; 文章目录 访问字典元素1. 使用键来访问值2. 使用 get() 方法 遍历字典元素1. 遍历字典的键2. 遍历字典的值3. 遍历字典的键和值4. 使用列表推导式来创建新的列表 实操 访问字典元素 1. 使用键来访问值 # 创…...

数据结构基础之《(9)—归并排序》

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

【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积

在全连接神经网络中&#xff0c;每个神经元都和上一层的所有神经元彼此连接&#xff0c;这会导致网络的参数量非常大&#xff0c;难以实现复杂数据的处理。为了改善这种情况&#xff0c;卷积神经网络应运而生。 一、卷积 在信号处理中&#xff0c;卷积被定义为一个函数经过翻转…...

远程视频验证如何改变商业安全

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

电脑启动需要经历哪些过程?

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

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库&#xff0c;如 ​​OpenCV​​ 或 ​​​dlib​​​&#xff0c;但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟&#xff0c;并在性能方面产生显著的权衡。…...

postman使用正则表达式提取数据实战篇!

之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联&#xff0c;match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中&#xff…...

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 用户 打开终端或命令行工具&#xff0c;通过SSH连…...

BurpSuite安装教程(详细!!附带下载链接)

声明 学习内容来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…...

MIPS寄存器文件设计实验

今天写MIPS寄存器文件设计实验&#xff0c;同时复习一下MIPS这块地方 实验要求&#xff1a; 一、寄存器的作用 想象一下&#xff0c;你正在厨房准备做一顿大餐。你需要用到各种食材和工具&#xff0c;比如刀、锅、砧板&#xff0c;还有食材本身&#xff0c;比如肉、菜、调料等…...

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那&#xff0c;《uniCloud云开发Vue3版本官方推荐用法》&#xff0c;这么课程已经得到了官方推荐&#xff0c;想要快速上手unicloud的小伙伴们&#xff0c;可以学习一下这么课程哦&#xff0c;不要忘了给一键三连呀。 在录制这门课程…...

反向代理模块开发

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…...

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式&#xff0c;本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口&#xff0c;其功能设计包括电源输入、光耦隔离信号输入输出…...

AI与ArcGIS Pro的地理空间分析和可视化

AI思维已经成为一种必备的能力&#xff0c;ArcGIS Pro3的卓越性能与ChatGPT的智能交互相结合&#xff0c;将会为您打造了一个全新的工作流程! 那么如何将火热的ChatGPT与ArcGIS Pro3相结合&#xff0c;使我们无需自己进行复杂的编程&#xff0c;通过强大的ChatGPT辅助我们完成地…...

详解HTML5语言

文章目录 前言任务一 认识HTML5任务描述&#xff1a;知识一 HTML5基础知识 任务二 HTML 5语义元素任务描述&#xff1a;知识一 HTML5新增结构元素知识二 HTML5文本语义元素 总结 前言 HTML5是一个新的网络标准&#xff0c;现在仍处于发展阶段。目标是取代现有的HTML 4.01和XHT…...

docker compose一键启动ES集群和kibana

集群启用了XPACK后&#xff0c;只有第一次可以启动成功。要是宕机了。就启动不了了。&#xff08;除非删除data目录所有数据&#xff09;生产环境 启用了后 建议配置 自定义证书。 services:es01:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.25"co…...

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络

遗传算法与深度学习实战&#xff08;25&#xff09;——使用Keras构建卷积神经网络 0. 前言1. 卷积神经网络基本概念1.1 卷积1.2 步幅1.3 填充1.4 激活函数1.5 池化 2. 使用 Keras 构建卷积神经网络3. CNN 层的问题4. 模型泛化小结系列链接 0. 前言 卷积神经网络 (Convolution…...

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后&#xff0c;通常会在电脑的磁盘上建立一个临时文件夹&#xff0c;里面存放allure测试报告&#xff0c;但是这个测试报告index.html文件单独去打开&#xff0c;却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…...

做一个购物网站需要什么技术/网站建设的公司

ubuntu16.04中系统自带python2.7和python3.5&#xff0c;现想更新python3版本至最新的python3.61、下载python3.6源码压缩包(Gzipped source tarball)下载地址&#xff1a;https://www.python.org/downloads/2、解压安装包到指定目录 tar zxvf Python-3.6.x.tgz(-C 指定目录&am…...

页面紧急情况访问升级跳拿笔记/关键词优化系统

使用版本&#xff1a;VS20191-两种格式单行注释&#xff1a;// 描述信息注&#xff1a;通常放在一行代码的上方&#xff0c;或者一条语句的末尾&#xff0c;对该行代码说明多行注释&#xff1a;/* 描述信息 */注&#xff1a;通常放在一段代码的上方,对该段代码做整体说明2-注释…...

创意家居网站建设与管理/网店推广策划方案

css div 底部对齐The bottom property in CSS is useful to change the vertical position of the positioned element. This property has no effects on non-positioned elements. CSS中的bottom属性对于更改已定位元素的垂直位置很有用。 此属性对未定位的元素没有影响。 B…...

院校网站建设/新闻发布最新新闻

1. 类型别名&#xff1a;为已有类型另外命名 1.1&#xff09; typedef 已有类型名 新类型名表 例&#xff1a; typedef double Area, Volume; typedef int Natural;Natural i1,i2; Area a; Volume v;1.2&#xff09; using 新类型名 已有类型名; 例&#xff1a; using A…...

wordpress oss 插件/怎么样引流加微信

我正在尝试制作一个简单的小工具,用于将英寸转换为厘米,并且试图接受用户输入(y或n)以决定是否进行另一次转换或终止.这就是我所做的:import timedef intro():print "Welcome! This program will convert inches to centimeters for you.\n"convert()def convert():i…...

wordpress avatars/seo综合检测

计算机专业考公务员好吗 - ...... 好考~ 按往年招收职位专业划分,前三位就是计算机,会计和中文,这三个专业哪个部门都需要.三本学生毕业想考公务员难不难 - ...... 可以考的,如果符合其他职位要求也是可以报考的,无论你是几本的学生,对于考公务员关系不大,因为现在的公务员招考…...