1、问题背景

在某个类中,用到了一个组合的widget,有按钮进度条等,类似于视频播放器按钮控制区和精度条(参考了很多feiyangqingyun的文章,感谢),调试正常后整理代码,为了提高代码可读性,把widget提到一个单独的类中,重命名为FlowPanel,子类化后发现之前设置的widget背景色无法生效。

2、在父类中直接创建widget控制面板

步骤1:

在父控件类中直接创建widiget:

flowPanel2=newQWidget(this);

initFlowpanel();

步骤2:调用初始化函数,设置元素和样式

voidPlayWidget::initFlowpanel()

{

flowPanel2->setObjectName("flowPanel");

QHBoxLayout*layout=newQHBoxLayout;

layout->setSpacing(3);

layout->setMargin(0);

layout->addStretch();

flowPanel2->setLayout(layout);

//按钮集合

QList<QString>btns;

btns<<"btnFlowVideo"<<"btnFlowSnap"<<"btnFlowSound"<<"btnFlowAlarm"<<"btnFlowClose";

QList<QIcon>icons;

icons<<QApplication::style()->standardIcon(QStyle::SP_ComputerIcon);

icons<<QApplication::style()->standardIcon(QStyle::SP_FileIcon);

icons<<QApplication::style()->standardIcon(QStyle::SP_DirIcon);

icons<<QApplication::style()->standardIcon(QStyle::SP_DialogOkButton);

icons<<QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton);

//循环添加顶部按钮

for(inti=0;i<btns.count();i++){

QPushButton*btn=newQPushButton;

connect(btn,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));

//设置标识,用来区别按钮

btn->setObjectName(btns.at(i));

btn->setFixedWidth(20);

//设置拉伸策略使得填充

btn->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding);

//设置焦点策略

btn->setFocusPolicy(Qt::NoFocus);

//设置图标大小和图标

btn->setIconSize(QSize(16,16));

btn->setIcon(icons.at(i));

//将按钮加到布局中

layout->addWidget(btn);

}

//设置样式

flowPanel2->setStyleSheet("#flowPanel{background-color:rgba(0,0,0,30);border:none;}");

}

3、使用子类化创建widget控制面板

因为这个panel要添加多个按钮,做不同的工作,为了提高代码的可读性,把flowpanel子类化。

问题出来了,子类化后panel的背景色消失了。

修改过程:

步骤1:子类化方式创建panel

//自定义工具栏

flowPanel=newFlowPanel(this);

步骤2:完成FlowPanel类的构造函数,添加元素和设置样式。

FlowPanel::FlowPanel(QWidget*parent):QWidget(parent)

{

this->setObjectName("flowPanel");

QHBoxLayout*layout=newQHBoxLayout;

........ // 全部拷贝的上面的内容,完全一样

//设置样式

this->setStyleSheet("#flowPanel{background-color:rgba(0,0,0,30);border:none;}");

}

运行效果如下:

4、解决方法

参考大神的博客:一去二三里(https://waleon.blog.csdn.net/article/details/50357715)。

重写绘图事件,背景色设置正常,和修改前一样。

void FlowPanel::paintEvent(QPaintEvent *event)

{

Q_UNUSED(event);

QStyleOption opt;

opt.init(this);

QPainter p(this);

style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

}

代码美化后效果如下:

Qt子类化后qss设置背景色无效的问题的更多相关文章

  1. 还是Qt 通过stylesheet或者palette设置背景色的问题

    关于Qt,设置一个widget的背景色后,希望子对象不受影响. 很久以前在QtForum上问过一个问题:http://www.qtforum.org/post/94103/setting-backgr ...

  2. jquery使用css函数设置背景色无效解决办法

    外部的css样式为: #imageArea{ width: 200px; height: 300px; background-color: #eee !important; } 通过 以下代码来修改其 ...

  3. ListBox设置背景色无效的问题。 listview类似

    <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Template"&g ...

  4. Qt子窗口设置背景色只能应用到其中的部件的问题

    问题描述:设置父窗口后子窗口会嵌在父窗口中,背景变透明,此时用qss设置子窗口的背景色发现只应用到的子窗口的控件中,除控件外的地方并没有应用到背景色. 解决方法:不使用qss设置背景色,重写paint ...

  5. 从以往子类化跟踪MouseLeave深入讨论VB6的自定义Hook类

    一.关于起因 之前发过一篇博文,是关于VB6中跟踪鼠标移出事件的示例(http://www.cnblogs.com/alexywt/p/5891827.html) 随着业务状况的不断发展,提出了更多的 ...

  6. 窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的

    1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息.一个应用程序通过截获属于另一个窗口的消息,从而实现增加.监视或者修改那个窗口的缺省行为.子类化是用来改变或者扩展一 ...

  7. 深入理解MFC子类化

    子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...

  8. Win32中安全的子类化(翻译)

    关于子类化的话题虽然有些旧,但它至今仍然不失为一种开发Windows的强有力技术,在MFC的内核.甚至.NET的内核中都离不开它,希望本连载能对Windows开发的爱好者有所帮助. 原文标题:Safe ...

  9. qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新

    qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...

随机推荐

  1. ASP.NET MVC 中解决Session,Cookie等依赖的方式

    原文:https://blog.csdn.net/mzl87/article/details/90580869 本文将分别介绍在MVC中使用Filter和Model Binding两种方式来说明如何解 ...

  2. hive命令查询数据不显示表头解决办法

    在hive命令行中查询数据如下: 表头未显示出来 解决办法: 修改hive安装包conf/hive-site.xml配置文件: <property> <name>hive.cl ...

  3. Sharepoint 2013设置customErrors

    原文地址:http://www.cnblogs.com/renzh/archive/2013/03/05/2944309.html#3407239 一.首先设置IIS中的Web.config文件 找到 ...

  4. 每日一题 - 剑指 Offer 32 - I. 从上到下打印二叉树

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag:BFS(广度优先搜索) 队列 难易程度:中等 题目描述: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印 ...

  5. Mac系统权限打开与关闭

    打开系统权限: 关闭mac command+R重启 菜单中找到终端 输入命令:csrutil enable 关闭系统权限: 重复以上1-3步骤,第4步时输入:csrutil disable

  6. java 基本语法(十三) 数组(六)数组的常见异常

    1.数组角标越界异常:ArrayIndexOutOfBoundsException int[] arr = new int[]{1,2,3,4,5}; // for(int i = 0;i <= ...

  7. 数据可视化之powerBI技巧(五)在Power BI中写出优雅的度量值是什么体验?

    之前的文章(采悟:连接表的几个DAX函数,一次全掌握)介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析. 之前的思路是计算出两个产品的共同客 ...

  8. 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取

    爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...

  9. 数据可视化之DAX篇(二十五)PowerBI常用的度量值:累计至今

    https://zhuanlan.zhihu.com/p/64999937 经常碰到本年至今.本月至今的数据计算,其实还有一类计算是,从历史最早日期至今的累计计算,比如从开业到现在总共卖出了多少件商品 ...

  10. Spring AOP底层实现分析

    Spring AOP代理对象的生成 Spring提供了两种方式来生成代理对象: JdkProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的 ...