当前位置: 首页 > 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/ .类样式{}...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​:下载安装 ​​De…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

JDK 17 序列化是怎么回事

如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...