Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)方法比较有趣)

摘要:
QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式。使用QPalette使用QPalette来设置背景色m_pWidget=newQWidget;m_pWidget-˃setGeometry;QPalettepal;pal.setColor;//设置背景黑色m_pWidget-˃setAutoFillBackground;m_pWidget-˃setPalette;m_pWidget-˃show();使用StyleSheet使用样式表来设置背景色,可以参考:QtStyleSheets文档m_pWidget=newQWidget;m_pWidget-˃setGeometry;m_pWidget-˃setStyleSheet;m_pWidget-˃show();如果从QWidget子类化一个Widget,为了能够使用样式表则需要为自定义Widget提供paintEvent事件。

QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色。

Qt中窗口背景的设置,下面介绍三种方法。

1.使用QPalette
2.使用Style Sheet
3.绘图事件

一般我不用QSS设置窗口背景,也不建议使用。(这里是对于窗口而,如果是子部件当然可以)。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式。

使用QPalette

使用QPalette来设置背景色

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300, 100);
QPalette pal(m_pWidget->palette());

pal.setColor(QPalette::Background, Qt::black);//设置背景黑色
m_pWidget->setAutoFillBackground(true);
m_pWidget->setPalette(pal);
m_pWidget->show();

使用Style Sheet

使用样式表来设置背景色,可以参考:Qt Style Sheets文档

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300, 100);
m_pWidget->setStyleSheet("background-color:black;");
m_pWidget->show();

如果从QWidget子类化一个Widget,为了能够使用样式表则需要为自定义Widget提供paintEvent事件。

void CustomWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);

QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
绘图事件

重写paintEvent,使用QPainter来绘制背景。

void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);

QPainter p(this);
p.setPen(Qt::NoPen);
p.setBrush(Qt::black);
p.drawRect(rect());
}

http://blog.csdn.net/liang19890820/article/details/50357715

免责声明:文章转载自《Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)方法比较有趣)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【环境搭建】PostgreSQL 10.7 rpm安装离线部署到 centOS 6.8论文笔记:(2019)GAPNet: Graph Attention based Point Neural Network for Exploiting Local Feature of Point Cloud下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

通过SSE(Server-Send Event)实现服务器主动向浏览器端推送消息

一、SSE介绍 1.EventSource 对象 SSE 的客户端 API 部署在EventSource对象上。下面的代码可以检测浏览器是否支持 SSE。 if (‘EventSource’ in window) {  }  使用 SSE 时,浏览器首先生成一个EventSource实例,向服务器发起连接。 var source = new EventSo...

laravel Event执行顺序

  laravel一大特色就是event事件系统。一般首先要listen一个事件,随后fire那个事件,这时执行路径将会调用event handler,返回后继续执行。例如: Event::listen('user.login',function(KidsitUser $user){ var_dump($user); }); Route::g...

Jquery页面中添加键盘按键事件,如ESC事件

$(document).keydown(function(event){ if(event.keyCode == 38 || event.keyCode == 104){ i--; if(i<=0){ i=0; }}else if (event.keyCode == 40 || event.keyCode == 98){ i++; if(i&g...

el-input按回车时,解决同时触发回车和失焦事件的问题

之前遇到一个问题:在el-input框同时绑定回车和失焦事件,两个事件触发的函数是一样的,回车的时候触发一次紧接着失焦也触发一次,导致回车一次触发两次函数。 <el-input v-model="msg"@blur="updateData"@keyup.enter.native="updateData"></el-input> m...

Zabbix邮件报警

Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时刻登录Zabbix监控平台刷新,查看服务器的状态。 可以在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到设定的触发器预设值时,不管任何时候,会自动发送报警邮件、微信信息到指定的...

Node.js躬行记(4)——自建前端监控系统

这套前端监控系统用到的技术栈是:React+MongoDB+Node.js+Koa2。将性能和错误量化。因为自己平时喜欢吃菠萝,所以就取名叫菠萝系统。其实在很早以前就有这个想法,当时已经实现了前端的参数搜集,只是后台迟迟没有动手,也就拖着。 目前完成的还只是个雏形,仅仅是搜集了错误和相关的性能参数。 后台样式采用了封装过的matrix。 分析功能还很薄弱...