处理继承自QWidget类的自定义类背景样式不生效问题【Qt】

ops/2024/11/17 21:33:25/

处理继承自QWidget类的自定义类背景样式不生效问题

  • 问题
  • 解答

问题

问题抛出:
  当我们定义一个自定义类,并且继承自QWidget类:
在这里插入图片描述
  为我们的自定义类进行构造:
在这里插入图片描述
  这是运行后的表现,其中每一份测试人物,头像,签名的组成来自于我们自定义的SessionFriendItem类。
在这里插入图片描述
我们要实现鼠标移动到控件上面时,控件的背景颜色变化,下面是代码实现:
在这里插入图片描述
运行后:
在这里插入图片描述
  运行后发现我们命名更改的是整个SessionFriendItem的背景颜色(在设置样式表的时候,当SessionFriendItem继承于QWidget,可以将SessionFriendItem看作QWidget,此处修改的为QWidget定义背景颜色,也就是定义SessionFriendItem的背景颜色),但是运行时发现并没有做到。

解答

解答:
  如果是一个内置类型的类继承自QWidget,当设置上面一系列操作时不会出现这个问题,这是因为内置的类重写了paintEvent函数,我们的样式表底层就是通过QPainter等画笔操作实现的,对于Qt内置的类,已经在paintEvent函数中处理好了相关的细节,在我们使用自定义的类想实现这个操作的话,就得手动实现paintEvent函数,这个在官方文档中有说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面是步骤,我们需要加上官方文档上的paintEvent函数的代码:
在这里插入图片描述
  此时测试发现问题得到了解决。
在这里插入图片描述
  至于文档中的这段代码,大致理解为读取我们给出的样式信息,然后调用底层设置样式的函数接口,将样式画出来。

void SessionFriendItem::paintEvent(QPaintEvent *event)
{(void) event;QStyleOption opt;opt.initFrom(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

  总结就是:Qt中,如果是给QWidget的子类通过qss设置背景色,默认情况下是不生效的,需要加上官方文档上的paintEvent函数,才能生效。


         新人创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看。


http://www.ppmy.cn/ops/134538.html

相关文章

富格林:正确应付阻挠虚假交易

富格林指出,投资者进入现货黄金市场的第一选择,应该是要学会正确阻挠虚假交易应对市场风险。市场千变万化,投资风险也随之而来,几乎每天都会有数据或消息公布,这也就使得该市场变得十分活跃。投资者要想正确应付阻挠虚…

批量重命名Excel文件并排序

批量重命名Excel文件并排序 python环境:3.5.2 import os import logging# 配置日志记录 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)def rename_files_with_sequence(directory):# 检查文件夹是否存在if not os.pa…

【python】掌握 Flask:轻量级 Web 开发框架解析

【Python】掌握 Flask:轻量级 Web 开发框架解析 引言 Flask 是一个轻量级、灵活且广受欢迎的 Python Web 开发框架。它以其简单易用、模块化和强大的扩展功能而闻名,适合用于小型应用和快速原型设计。同时,Flask 提供了一系列工具和库&…

【小白可懂】微信小程序---课表渲染

结果展示:(代码在最后) WeChat_20241116174431 项目简介 在数字化校园建设的大背景下,为了更好地服务于在校师生,我们开发了一款基于微信小程序的课表管理系统。该系统采用了现代化的前端技术和优雅的设计风格&#x…

6. Keepalived配置Nginx自动重启,实现7x24提供服务

一. Keepalived配置Nginx自动重启,实现7x24提供服务 1.编写不停的检查nginx服务器状态,停止并重启,重启失败后则停止keepalived脚本 cd /etc/keepalived/ vim check_nginx_alive_or_not.sh #---内容如下:--------------- #!/bin/bash A=`ps -C nginx --no-header |wc -l

23 种设计模式详解

设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、 组合模…

async 和 await的使用

一、需求 点击按钮处理重复提交,想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作,需要等方法里流程都走完,再把disabled设为false,这样下次点击按钮时就可以继续走方法里的ajax等操作…

前端面试笔试(四)

目录 一、数据结构算法等综合篇 1.线性探查法解决哈希冲突 2.请求分页系统中文件区和对换区 3.RADIUS认证协议,运行在哪个网络协议上 二、代码输出篇 1.res[1,2,100].map(parseInt) 如果我们想要输出为[1,2,100],可以: 还可以换map里…