首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QPalette中删除QWidget

如何从QPalette中删除QWidget
EN

Stack Overflow用户
提问于 2017-03-01 15:26:41
回答 1查看 1.2K关注 0票数 1

根据Qt的QWidget文档

QWidget将显式调色板角色从父级传播到子级。如果将画笔或颜色分配给调色板上的特定角色,并将该调色板分配给小部件,则该角色将传播到小部件的所有子部件,覆盖该角色的任何系统默认值。

我有一个小部件层次结构:

代码语言:javascript
复制
QMainWindow 'window'
     |_QGroupBox 'box'
          |_QLabel 'label'
          |_QLabel 'label2'

因此,如果我要调用box->setPalette(somePalette),新的调色板将用于绘制boxlabellabel2

现在我想撤销这个问题,即我希望boxlabellabel2使用我的默认调色板,这很容易,我称之为box->setPalette(window->palette()),对吗?

这方面的问题是,box在技术上仍然有一个自定义的调色板集(它使您传递给它的调色板的副本很深),如果我修改window的调色板,它就不再通过box传播到labellabel2

那么,如何从box中实际删除调色板,从而恢复调色板的传播呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-01 15:40:48

如何将调色板从框中实际删除,以便恢复调色板的传播?

您可以使用QWidget::setAttribute显式设置或删除Qt::WA_WindowPropagation标志,以确保调色板被传播(或不传播)。根据我的经验,有时需要事后调用QWidget::update()

UPDATE:还有Qt::WA_SetPalette属性,用于启用/禁用单个小部件调色板更新。对于这种特殊情况,我们需要首先将调色板传播到嵌套的小部件,正如作者在注释(如box->setPalette(window->palette()); box->setAttribute(WA_SetPalette, false); )中所建议的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42535679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档