QT QWidget 背景颜色 鼠标hover 背景颜色研究

news2024/12/22 17:25:18

自定义控件 UserAvatarWidget 的样式问题及解决方案

场景描述

我开发了一个继承自 QWidget 的自定义控件 UserAvatarWidget,并在 .ui 文件中引入了该控件。引入代码如下:

<item>
    <widget class="UserAvatarWidget" name="userAvatarWidget" native="true">
        <property name="minimumSize">
            <size>
                <width>100</width>
                <height>0</height>
            </size>
        </property>
        <property name="maximumSize">
            <size>
                <width>100</width>
                <height>16777215</height>
            </size>
        </property>
        <property name="styleSheet">
            <string notr="true">background-color: rgb(255, 228, 253);</string>
        </property>
    </widget>
</item>

在初始状态下,UserAvatarWidget 的背景颜色是 .ui 文件中设置的粉色(#FFE4FD),如图所示:
在这里插入图片描述

问题描述

我不想依赖 .ui 中设置的背景颜色

为了给 UserAvatarWidget 添加背景颜色和鼠标悬停时的颜色变化,我尝试使用内联样式来设置这些属性。具体代码如下:

UserAvatarWidget::UserAvatarWidget(QWidget* parent)
    : QWidget(parent) {
    setObjectName("userAvatarWidget");
    this->setStyleSheet(
        "#userAvatarWidget { background-color: yellow; } "
        "#userAvatarWidget:hover { background-color: lightpink; }"
    );
    setupUI();
}

然而,背景颜色并未显示为内联样式设置的黄色,也不是 .ui 中设置的背景颜色了,并且鼠标悬停效果也未生效,如图所示:
在这里插入图片描述
经过调试,我发现添加 setAttribute(Qt::WA_StyledBackground); 后,内联背景颜色和鼠标悬停效果才开始正常工作:
在这里插入图片描述
完整代码如下:

UserAvatarWidget::UserAvatarWidget(QWidget* parent)
    : QWidget(parent){
    setObjectName("userAvatarWidget");
    this->setStyleSheet(
        "#userAvatarWidget { background-color: yellow; } "
        "#userAvatarWidget:hover { background-color: lightpink; }"
    );
    setAttribute(Qt::WA_StyledBackground);
    setupUI();
}

内联样式虽然解决了,但是我更想使用 .css 样式设置。

.css 尝试

然而,在 .css 文件中添加样式并调用 setAttribute(Qt::WA_StyledBackground); 仍然没有效果:
下面是我没有效果的代码:

UserAvatarWidget::UserAvatarWidget(QWidget* parent)
    : QWidget(parent) {
    setObjectName("userAvatarWidget");
    setAttribute(Qt::WA_StyledBackground);
    setupUI();
}
QWidget#userAvatarWidget{
    background-color:yellow;
}
QWidget#userAvatarWidget::hover{
    background-color:lightpink;
}

最终解决方法

经过多次试验,我找到了一种解决方案:移除 .ui 文件中的样式表设置,并在 .css 文件中添加样式,同时确保在构造函数中调用 setAttribute(Qt::WA_StyledBackground);

修改后的 .ui 文件

<item>
    <widget class="UserAvatarWidget" name="userAvatarWidget" native="true">
        <property name="minimumSize">
            <size>
                <width>100</width>
                <height>0</height>
            </size>
        </property>
        <property name="maximumSize">
            <size>
                <width>100</width>
                <height>16777215</height>
            </size>
        </property>
    </widget>
</item>

.css 文件

QWidget#userAvatarWidget {
    background-color: yellow;
}

QWidget#userAvatarWidget:hover {
    background-color: lightpink;
}

修改后的 .cpp 文件

UserAvatarWidget::UserAvatarWidget(QWidget* parent)
    : QWidget(parent) {
    setAttribute(Qt::WA_StyledBackground);
    setupUI();
}

通过这种方式,UserAvatarWidget 的背景颜色和鼠标悬停效果都按预期工作。

总结

  • Qt::WA_StyledBackground 是关键:对于任何需要从样式表中获取背景绘制的自定义控件,务必设置 Qt::WA_StyledBackground
  • 样式表优先级:避免在同一控件上同时使用多种样式表设置(如 .ui 文件、内联样式和全局 .css 文件),以防止样式冲突。
  • 集中管理样式表:尽量将样式表集中管理,避免在多个地方分散设置样式,减少样式冲突的可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaScriptBOM

1.1、BOM概述 1.1.1、BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准…

【Lua热更新】上篇

Lua 热更新 - 上篇 下篇链接&#xff1a;【Lua热更新】下篇 文章目录 Lua 热更新 - 上篇一、AssetBundle1.理论2. AB包资源加载 二、Lua 语法1. 简单数据类型2.字符串操作3.运算符4.条件分支语句5.循环语句6.函数7. table数组8.迭代器遍历9.复杂数据类型 - 表9.1字典9.2类9.3…

AJAX与Axios

什么是 AJAX ? AJAX 是异步的 JavaScript 和 XML&#xff08;Asynchronous JavaScript And XML&#xff09;。 简单理解AJAX&#xff1a;是一种客户端与服务器进行网络通信技术&#xff0c;AJAX通常使用XMLHttpRequest 对象来发送请求和接收响应 现代开发中我们通常使用 JS…

1.gitlab 服务器搭建流程

前提条件&#xff1a; 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网&#xff1a;https://about.gitlab.com/ 下载地址&#xff1a;gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…

springboot462学生心理压力咨询评判(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装学生心理压力咨询评判软件来发挥其高效地信息处理的作用&am…

git分支管理及策略

Git 的默认分支就是 master。你所作的commit会在master分支上自动移动。 在多次提交操作之后&#xff0c;master分支指向最后那个commit object&#xff08;提交对象链&#xff09;。 Git 的 “master” 分支并特殊&#xff0c;跟其它分支没有区别。 之所以几乎每一个仓库都有…

python中wb有什么用

‘wb’&#xff1a;表示以二进制写方式打开&#xff0c;只能写文件&#xff0c; 如果文件不存在&#xff0c;创建该文件&#xff1b;如果文件已存在&#xff0c;则覆盖写。 Python文件使用“wb”方式打开&#xff0c;写入字符串会报错&#xff0c;因为这种打开方式为&#xff…

Connecting to Oracle 11g Database in Python

# encoding: utf-8 # 版权所有 2024 涂聚文有限公司 # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a;python -m pip install oracledb # python -m pip install cx_Oracle --upgrade # pip install cx_Oracle # Autho…

学工管理系统-职校信息化管理平台

学工管理系统是一种致力于提升职校管理效率和信息化水平的重要工具。它综合运用了现代信息技术和学工管理理念&#xff0c;为学校提供了全面、科学、高效的管理平台。 学工管理系统在学校管理中发挥着重要的作用。它能够实现学生信息的完整管理&#xff0c;包括学籍、课程、成绩…

MySQL三大日志-Binlog

Binlog简介 Redo Log 是属于InnoDB引擎所特有的日志&#xff0c;而MySQL Server也有自己的日志&#xff0c;即 Binary log&#xff08;二进制日志&#xff09;&#xff0c;简称Binlog。Binlog是记录所有数据库表结构变更以及表数据修改的二进制日志&#xff0c;不会记录SELECT…

【Token】校验、会话技术、登录请求、拦截器【期末实训】实战项目学生和班级管理系统\Day15-后端Web实战(登录认证)\讲义

登录认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以我们今天的主题就是登录认证。 最终我们要实现…

物联网:全面概述、架构、应用、仿真工具、挑战和未来方向

中文论文标题&#xff1a;物联网&#xff1a;全面概述、架构、应用、仿真工具、挑战和未来方向 英文论文标题&#xff1a;Internet of Things: a comprehensive overview, architectures, applications, simulation tools, challenges and future directions 作者信息&#x…

实验13 C语言连接和操作MySQL数据库

一、安装MySQL 1、使用包管理器安装MySQL sudo apt update sudo apt install mysql-server2、启动MySQL服务&#xff1a; sudo systemctl start mysql3、检查MySQL服务状态&#xff1a; sudo systemctl status mysql二、安装MySQL开发库 sudo apt-get install libmysqlcli…

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展&#xff0c;4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性&#xff0c;为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…

在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题

问题复现 uniapp项目在浏览器运行&#xff0c;有可能调用某些接口会出现跨域问题&#xff0c;报错如下图所示&#xff1a; 什么是跨域&#xff1f; 存在跨域问题的原因是因为浏览器的同源策略&#xff0c;也就是说前端无法直接发起跨域请求。同源策略是一个基础的安全策略&a…

自毁程序密码—阿里聚安全(IDA动态调试)

App信息 包名&#xff1a;com.yaotong.crackme Java层分析 MainActivity 很容易就能看出来是在securityCheck函数里进行安全校验。securityCheck是一个native函数&#xff0c;到so中进行分析。 SO层分析 定位函数位置 在导出函数里搜索 securityCheck 数据类型修复和…

使用国内镜像网站在线下载安装Qt(解决官网慢的问题)——Qt

国内镜像网站 中国科学技术大学&#xff1a;http://mirrors.ustc.edu.cn/qtproject/清华大学&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/qt/北京理工大学&#xff1a;http://mirror.bit.edu.cn/qtproject/ 南京大学&#xff1a;https://mirror.nju.edu.cn/qt腾讯镜像&…

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…

大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

Mysql中的排序与分页

1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序 DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 1.3 多列排序 可以使用不在SELECT列表中的列排序。 在对多列进行排序的时候&a…