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

【Qt样式(qss)-5】qss局部渲染混乱,错乱,不生效的一种原因

前言:

之前写过一些关于qss的文章:

【Qt样式(qss)-1】手册小结(附例:软件深色模式)_深蓝色主题qss表-CSDN博客

【Qt样式(qss)-2】使用小结(软件换肤,比如暗黑模式)_qt 黑色qss_大橘的博客-CSDN博客

【Qt样式(qss)-3】几套配色方案_qt界面配色_大橘的博客-CSDN博客

【Qt样式(qss)-4】应用到QMdiArea不生效的解决_qt样式不生效_大橘的博客-CSDN博客

主要是记录一下备忘。

回顾:

先说一下我对层叠样式的理解(qss/css),各位看看有无错误:

一般情况下样式优先,除非画笔强制。

发生嵌套时,局部优先。

有先后顺序时,后面的优先,因为覆盖了前面的。就好像给一个变量赋值,肯定最后一次有效。

问题:

最近遇到一个问题,简单如下图所示,画一个窗体,上面放QTabWidget,页面里面放若干QLabel,和QPushButton。然后统一在主窗体构造中设置qss。

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setStyleSheet("* { background-color: red; }");this->setStyleSheet("");this->setStyleSheet("* { background-color: none; }");
//    this->setStyleSheet("* { background-color: 0; }");
//    this->setStyleSheet("* { background-color: transparent; }");ui->label->clear();ui->label->setPixmap(QPixmap("D:/_nx/_zonglin/ImgDisplay/_imgdisplay_images/_common/back.png"));ui->label->lower();
}MainWindow::~MainWindow()
{delete ui;
}

按上面这样,按理说非常简单,不能有意外。先预测一下运行效果,理论上以下三句:

    this->setStyleSheet("* { background-color: red; }");this->setStyleSheet("");this->setStyleSheet("* { background-color: none; }");

应该相当于啥也没写,因为默认这些组件就是透明的。实际效果也确实如下:

首先是否有人质疑,为什么background-color的值不是写transparent?我试过,是这样的:

意外吧?这个我不想深究了。重要的是下面。

在设计器中,随便把某个子控件设置个qss,不管是代码还是设计器当中,一样的。比如这样:

我是在设计器中把最后那个QLabel更改了样式表,background-color: yellow;

按照构造顺序,理论上最后主窗体的三个setStyleSheet应该覆盖了这个yellow,不是层叠样式吗?运行一下是这样的:

这是覆盖哪去了?这个QTabWidget就像一个结界一样。首先,主窗体setupUi当中,分别调用了子控件的构造,也会加载qss,所以先显示为黄色。

主窗体中,第一次setStyleSheet,QTabWidget中的按钮都跟着成了红色,它生效了。

this->setStyleSheet("* { background-color: red; }");

第二次设置qss为空,是为了先清空一下以防异常。

this->setStyleSheet("");

第三次设置背景透明,按说应该一切恢复,但它成了结界??

this->setStyleSheet("* { background-color: none; }");

然后为了解决就各种尝试,不行。几乎打破了我对qss的所有认知。

直到最后发现,去掉之前设置的yellow,一切正常了。

思考:

这个问题对于我来说不需要深究,但茶余饭后跟同事聊天时,突然有个想法。

qss局部优先是没问题的,如果没有设置局部,肯定全局渲染。如果设置了局部,估计是有个标记变量,这个变量会更改规则,全局渲染时它会绕开已经渲染的局部。

所以上面代码,当我不指定那个label是黄色时,全局有效没有问题。当指定了某个label是黄色时,我猜是这样:

首先启用了局部优先规则。

第一次全局渲染成红色时,因为这时候除了黄色label,其它都没有渲染,所以全局被渲染成红色。

之后再全局渲染时,因为之前已经都成了红色,相当于这些局部都已经有了红色渲染,所以就被绕开了,因此只有外围有效。

结论:

由于不想投入太多精力,所以目前为止我没有去找有力的依据。目前上述只能归结为qss局部渲染机制问题。亦即:

一旦局部组件被显式地单独渲染,就会启用局部优先规则。

一旦启用局部有限规则,全局渲染时就会绕开已经被渲染的局部组件。

但其实,我觉得更好的方式是:它应该去只绕开显式局部渲染的组件,而不是有渲染就绕开。

相关文章:

【Qt样式(qss)-5】qss局部渲染混乱,错乱,不生效的一种原因

前言: 之前写过一些关于qss的文章: 【Qt样式(qss)-1】手册小结(附例:软件深色模式)_深蓝色主题qss表-CSDN博客 【Qt样式(qss)-2】使用小结(软件换肤&#…...

最新基于机器学习模型单图换脸离线版软件包及使用方法,本地离线版本模型一键运行(免费下载)

最新基于机器学习模型单图换脸离线版软件包及使用方法,本地离线版本模型一键运行(免费下载)。 “单图换脸”离线一键运行版来了。Roop发布几十个小时后,马不停蹄地搞了Colab在线版。其实这东西都挺好的,又快又方便,几乎没有任何硬件要求,点一点就可以搞定了。但是它有…...

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node,官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径, 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令,Windows10 一般自带。 可以通过以下方式…...

Pytorch实现深度学习常见问题

RuntimeError: stack expects each tensor to be equal size, but got [3, 300, 300] at entry 0 and [3, 301, 301] at entry 24 这里的问题出现的原因肯定是在数据预处理处,如下图,当数据使用不同的transforms处理方式时,会导致数据的尺寸大…...

ICMP权限许可和访问控制漏洞处理(CVE-1999-0524)

一、问题描述 某次例行安全扫描,发现:ICMP权限许可和访问控制漏洞,编号:CVE-1999-0524,危险级别:低风险。利用该漏洞,远程主机会回复ICMP_TIMESTAMP查询并返回它们系统的当前时间,I…...

Java生成优惠券兑换码并确保唯一性最终添加到数据库

1.使用随机数生成器或其他生成唯一标识符的算法来生成兑换码。 2.创建一个 HashSet 或其他适合存储兑换码的数据结构来确保唯一性。每次生成一个兑换码时,先检查它是否已经存在于 HashSet 中,如果存在则重新生成直到生成一个新的唯一兑换码。 3.循环调…...

【Linux/脚本/芯片学习】Perl学习

Title:Perl学习 个人学习策略 主用python. 看懂perl 和 tcl 即可。 之前的存货 开始搬砖后,整理 ”网络发布版笔记“ 的心思寡淡了好多,可能就是被工作榨干的原因8… 但今天至少得赶个1024节日… ( ̄▽ ̄)"~ 1 介…...

嵌入式实时操作系统的设计与开发(信号量学习)

信号量 除了临界点机制、互斥量机制可实现临界资源的互斥访问外,信号量(Semaphore)是另一选择。 信号量与互斥量的区别 对于互斥量来说,主要应用于临界资源的互斥访问,并且能够有效地避免优先级反转问题。对于信号量…...

python环境安装教程

Python是一种流行的高级编程语言,它简单易学、功能强大,适用于各种应用领域,从Web开发到数据科学和人工智能。在本教程中,我将向您介绍如何安装Python并设置您的开发环境。请注意,以下步骤适用于Windows操作系统。 步…...

【学习笔记】CF1784F Minimums or Medians

首先让 n n n乘上 2 2 2。 考虑枚举最终被删除的位置有哪些。 a i 0 a_i0 ai​0表示这个位置被删除, a i 1 a_i1 ai​1表示这个位置被保留,设满足 a i 0 a_i0 ai​0的前缀长度为 l l l( l l l是偶数), p r e i pre…...

如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)

文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot(阶段一)配合SpringBoot(阶段二)1.EnableLakerFeignClients2.Lak…...

Python学习第2天-安装pycharm

文章目录 前言一、下载二、安装1.选择安装目录2.安装配置 总结 前言 好用的工具可以极大地提高生产力,开发Python推荐使用jetbrains全家桶的pycharm。 一、下载 通过官网下载安装包。 二、安装 1.选择安装目录 2.安装配置 一路Next,安装完成 总结 …...

等电位连接器行业应用综合方案

等电位连接器的原理 等电位连接器的原理是利用气体放电管或压敏电阻等非线性元件,当连接器两端的电位差大于所限峰值电压时,连接器导通,迫使连接器两端不同接地体电位基本相等,消除接地体间放电现象,从而避免了由于地…...

内裤洗衣机有用吗?最好用的四款内衣洗衣机测评

相信很多小伙伴往往会因为懒而不想洗内衣,又或者洗内衣时经常会洗不干净!这时就很有必要入手一台内衣洗衣机了,当我们洗完澡时,顺手把内衣放入洗衣机内,一键启动即可把我们的内衣洗得干干净净!同时还可以为…...

足底筋膜炎能自愈吗

什么是足底筋膜炎 足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致。最常见症状是脚跟的疼痛与不适,压痛点常在足底近足跟处,有时压痛较剧烈,且持续存在。晨起时疼痛感觉明显,行走过度时疼痛感加剧,严重患者甚至站…...

牛客网刷题-(3)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...

Centos7 安装 Etcd

Github上下载并解压安装包 wget https://github.com/coreos/etcd/releases/download/v3.4.10/etcd-v3.4.10-linux-amd64.tar.gz tar xzvf etcd-v3.4.10-linux-amd64.tar.gz mv etcd-v3.4.10-linux-amd64 /opt/etcd解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是serve…...

powerjob基于springboot2.1.6.RELEASE版本的问题研究

项目背景:基于第三代框架的集成问题,如果对于powerjob不熟悉的朋友,可以参考官方文档PowerJob 简介 语雀 关于语雀 23 日故障的公告 (qq.com) 简单插一句,针对语雀文档故障的心得,数据恢复,完整性&#…...

【AI视野·今日CV 计算机视觉论文速览 第270期】Wed, 18 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Wed, 18 Oct 2023 Totally 60 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers 4K4D: Real-Time 4D View Synthesis at 4K Resolution Authors Zhen Xu, Sida Peng, Haotong Lin, Guangzhao He, Jiaming …...

uni-app小程序,uview-ui组件样式无法穿透修改的解决办法

1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...