QWidget代码设置样式表探讨

前言

众所周知,在QT中修改部件样式,是通过样式表的方式来设置的。而设置样式表,一般常用就两种方式,分别为QT Designer界面直接右击设置样式表,以及代码设置样式表。

正常情况下都是可以成功的,但是在某种情况下却不成功,让我娓娓道来。

两种样式表设置方式的对比

第一种,QT Designer界面直接右击部件,在样式表选项里面输入。
在这里插入图片描述
右击在background-color里面随意设置一个颜色,这就是最简单的样式表设置了。意思是,设置一个蓝色的背景颜色。
在这里插入图片描述
有关样式表语句的相关语法,可以慢慢学习,其实还挺多的,可能接触网页的同学比较好上手一点。
对于我本人来说,用到最多的写法就是:

#widgettop{background-color: rgb(0, 170, 255);}
或者
#QWidget{background-color: rgb(0, 170, 255);}

为什么要用#XXX{…}来包括住原本的样式语句呢?原因是因为像QWidget这类的窗口容器控件,它们身为父类,样式设置会自动继承到他的子类上面去。也就是说如果我往QWidget里面放一个QPushButton按钮或者QLabel标签,他们都会继承父类QWidget的样式,即为蓝色。

这显然在某些情况下是不适用的。当然子类重复设置样式语句的话,会覆盖掉父类的样式,但一般用#XXX{…}的话,就能保证语句只实现在父类的QWidget中,不会影响它里面的子类控件。

这里讨论一下widgettop和QWidget,前者是该控件实例时的对象名objectName,后者是该控件的类名,两者都能成功进行设置,可以满足以上两段文字讨论的效果,即为设置蓝色。
在这里插入图片描述

回到开头,除了在QT Designer里面直接设置样式表,还可以在代码当中设置,例如:

ui->widgettop->setStyleSheet("#widgettop{background-color: rgb(255, 170, 127);}");
或
ui->widgettop->setStyleSheet("#QWidget{background-color: rgb(255, 170, 127);}");

这两种都是可以成功设置的,实现的效果为橙色:
在这里插入图片描述

特殊的情况

以上两种情况的样式设置搞清楚后,我讲一下我遇到的特殊情况:
样式表中的一些参数,包含了一些尺寸大小信息:例如窗口的边框宽度,四角圆角的半径等,这些数值可能会根据软件窗口所在当前显示器的分辨率,需要灵活调整。
比如,在1080P屏,QWidget的圆角半径是10px,但在4k屏上,则需要显示为20px,才能达到观看尺寸一致的情况。

所以,也就可能会遇到:已经在QT Designer里面设置过样式表,然后代码内重复设置样式表,的情况。

正常来说,样式表的重复设置,会覆盖掉原先设置的,所以以上的做法也是OK。

那问题究竟是什么呢?是QWidget里面包含了其他的控件!!

产生的问题

随便在设置了蓝色背景的Widget里面丢一个QLabel
在这里插入图片描述
然后代码里再设置橙色

ui->widgettop->setStyleSheet("#widgettop{background-color: rgb(255, 170, 127);}");

结果是蓝色
在这里插入图片描述
把QLabel移出
在这里插入图片描述
再次编译,为橙色
在这里插入图片描述
这和样式表的设置方式没有关系,就是QWidget里面是否包含其他控件的区别

初步结论

QWidget当做容器,且内部有子控件时,QT Designer的样式表设置和代码设置冲突,需取消QT Designer的设置,完全在代码内部设置才可以。

分析

QWidget这个类还蛮奇怪的,它是容器类,本质上是用来装东西的,但是如果里面没有东西,他又可以作为一个独立的窗口,如果它没有父类指向的话,甚至可以作为一个独立的Windows窗口,和QMainWindow和QDialog效果是一样的,而且本人觉得它比较万用灵活,所以界面窗口一般都采用QWidget来做。

但正如以上分析的,这个类确实存在不少的坑。不只是这个,在对于没有父类指向的顶层QWidget窗口设置背景时,往往是不成功的,需要在paintEvent重载里面,设置一段代码,样式表才会生效


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

(引用一下别人的描述:
如果要子类化一个QWidget,为了能够使用样式表,则需要提供paintEvent事件。这是因为QWidget的paintEvent()是空的,而样式表要通过paint被绘制到窗口中。)
可能是这个原因吧,也导致了样式表重复设置有问题。

因为在设置样式时疑惑了很久,浪费了不少时间,所以试图分析记录下来,但你说具体是什么原因?

很抱歉,实力水平不咋地,还真是没太想明白。可以指教一下,或者有待我日后补充吧。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt多版本更换以及更新更高版本的qt

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

QT for Android 修改图标与名称

第一步:进入项目模式 第二步:点击完成后会在项目中生成一个名为"android"的文件夹 第三步:将准备好的png格式的图标放在"android"的文件夹下 第四步:添加图标到项目中 第五步:修改图标&#xff08…

Qt动画分享

前言 在使用Qt制作界面的过程中,经常会用到Qt的动画,Qt自带的动画框架用来做简单的控件动画效果是比较简单易用的,比如对控件的位移、缩放、透明度等,可以提高界面的科技感。 动画框架 动画框架旨在为创建动画和平滑的gui提供一…

Qt Creator中切换不同Qt版本

我们安装QT版本,安装之后,Qt Creator中默认就是最新的QT版本。 例如,我之前安装了QT5.9, 第二次安装QT5.15, 则最新的都是QT5.15版本了。此时我要维护老的项目,而老的项目又是在QT5.9下开发的,许多库都在新的QT版本下编…

Qt 如何改变图标颜色

1. 下载图标 要实现图标修改颜色的功能需要去阿里巴巴矢量图标库选择自己需要的图标(网站:阿里巴巴矢量图标库),将需要的图标添加入库,如下 加入后,去右上角点击购物车图标,把代码下载下来解压…

【Qt炫酷动画】专栏导航目录

历时小半年,经过总结积累,详细剖析了Qt框架如何制作动画。 通过本专栏学习,可以学会如何diy窗体动画、控件动画 Qt动画 【Qt炫酷动画】专栏导航目录 【Qt炫酷动画】0.动画类简介 【Qt炫酷动画】1.easing官方demo详细剖析 【Qt炫酷动画】2.…

QT中怎么使用QPalette设置按钮控件背景色

这里写自定义目录标题 ui->pushButton->setAutoFillBackground(true);//获得当前选择的颜色值QStringList colorList QColor:: colorNames();QColor color QColor(colorList[ui->comboBox_3->currentIndex()]);QPalette p ui->frame_2->palette();p.setCol…

Qt基于Qml修改SVG颜色

效果: 1.引入包: import QtGraphicalEffects 1.12 2. 修改SVG颜色 Image{id: imagewidth: 48height: 48anchors.horizontalCenter: parent.horizontalCentersource: "svg图片路径"ColorOverlay{anchors.fill: imagesource: imagecolor: "red" //修改后的…

TV直播app TV版 超级直播 空壳 可玩性强 带EPG 带回看 带自定义 定制可带自定义协议等

TV直播app 超级直播 空壳 可玩性强 带EPG 带回看 带自定义 定制可带自定义协议等 一、是个空壳,也可以定制二、定制的话,带EPG,带7天回看,甚至可带自定义协议等。三、免责声明 一、是个空壳,也可以定制 可自行导入自己的播放地址…

Qt QDialog更换图标icon

Qt QDialog更换图标icon 1. 如何获取一个.ico文件2. 在项目中更换图标3. 无法定位程序输入点的解决方法 1. 如何获取一个.ico文件 首先向大家推荐一个非常好用的网站:https://www.iconfont.cn/ 这个网站可以免费下载各种图标下载好图标之后,使用图标格式…

QT-纯代码控件-QTabWidget(导航栏切换)

实现一个页面切换功能 1.新建一个无ui界面的工程&#xff0c;其基类为dialog 2.代码实现 dialog.h 添加QTabWidget头文件 #include <QTabWidget>Dialog类中进行私有控件声明 private:QTabWidget * tabWidget;dialog.cpp #include "dialog.h" #include &l…

QT 幸运大转盘动画

想要更多项目私wo!!! 一、项目简介 幸运大转盘的制作其实很简单&#xff0c;幸运大转盘的整体思想是这样&#xff1a; 1.定时器用来刷新大转盘的界面这样就有动态的旋转效果&#xff0c; 2.监听键盘事件&#xff0c;通过键盘控制大转盘的开关&#xff0c;然后…

Qt QTableWidget设置表头、菜单 背景色,以及不成功的原因

Qt QTableWidget设置表头背景色不成功的原因 QTableWidget没有设置背景色的函数&#xff0c;通过Qss样式来设置背景色 m_pTable->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color: QColor(232, 242, 255, 255);}"); 通过QClolor设…

青龙面板-酷狗

酷狗捉包&#xff0c;有人出1元让我抓包&#xff0c;我会收钱吗&#xff01; 授人以鱼不如授人以渔&#xff01;我的运行截图&#xff01; 马上安排教程&#xff08;下期再整个视频教程&#xff09; 拉库地址 ql raw https://gitee.com/jaun920/scripts/raw/master/YM/kgyy.…

Qt实现歌词播放流光跑马灯特效

效果图如下 实现原理 利用Qt的绘制函数&#xff0c;先绘制歌词文案&#xff0c;然后绘制歌词遮罩&#xff0c;歌词遮罩通过定时器计算时长&#xff0c;从而改变遮罩长度&#xff0c;达到效果。 核心代码 //设置歌词内容和启动定时器 void Lrc::startLrcMask(qint64 interval…

Qt的纽带风格界面实现(最新的Office Ribbon风格)

Qt的纽带风格界面实现&#xff08;最新的Office Ribbon风格&#xff09; 之前有朋友已经做了360风格的自定义界面&#xff0c;非常棒&#xff0c;也帮助了不少开发的朋友。近期我也用Qt做了一些界面框架和风格方面的工作&#xff0c;主要是客户端软件采用的OfficeRibbion风格&a…

Qt简单代码修改图标图片颜色

一、前言 通过qt的简单代码实现更改图标颜色&#xff0c;颜色的单一修改填充。 二、代码 实现代码&#xff1a; /* * QIcon icon 待修改的图标 * QColor color 需修改的颜色 * 返回修改后的QIcon */ QIcon mainwindow::setIconColor(QIcon icon, QColor color…

QT代码风格设置

现在记录一下自己思路或者一些常用的知识点&#xff0c;这样以后自己忘记了可以很快查找翻阅一下&#xff0c;可以当个备忘录。同时如果这些东西对其他人有帮助的话&#xff0c;也是特别好的&#xff0c;也会让自己有成就感&#xff0c;给自己更多的前进动力。 这里搜索了很多资…

【实战篇】是时候彻底弄懂BERT模型了(收藏,已修复)

引言 本文是【理论篇】是时候彻底弄懂BERT模型了的姊妹篇。在本文中&#xff0c;我们通过&#x1f917;的transformers库来实战使用预训练的BERT模型。 我们主要会实战文本分类中的情绪识别任务和自然语言推理中的问答任务。 注意&#xff0c;文中提到的嵌入表示、嵌入、嵌入…

【Meta-Al】llama GPT 测试

2023-4-28 更新&#xff1a; github有兄弟合并量化了7B、13B的权重&#xff0c;Chinese-Alpaca项目部署体验更简单&#xff1a; GitHub - ymcui/Chinese-LLaMA-Alpaca: 中文LLaMA&Alpaca大语言模型本地CPU/GPU部署 (Chinese LLaMA & Alpaca LLMs) github地址&#xf…