根据qt的qwidget文档:
Qwidget传播了从父母到孩子的明确调色板角色。如果您将刷子或颜色分配给调色板上的特定角色并将调色板分配给小部件,则该角色将向所有小部件的孩子传播,从而超过该角色的任何系统默认值。
我有一个小部件层次结构:
QMainWindow 'window'
|_QGroupBox 'box'
|_QLabel 'label'
|_QLabel 'label2'
所以,如果我打电话给box->setPalette(somePalette)
,新的调色板用于绘画box
,label
和label2
现在我想撤消此问题,即我要box
,label
和label2
使用我的默认调色板,这很容易,我叫box->setPalette(window->palette())
,对吗?
此问题是box
仍然具有自定义调色板集(它可以使您通过它通过它的深度副本),如果我修改了window
的调色板,它将不再通过box
传播到label
和label2
。P>
那么,我如何实际从box
中删除调色板,以便恢复调色板的传感
我如何实际从框上删除调色板,以便调整调色板的传播?
您可以使用Qwidget :: setAttribute明确设置或删除Qt::WA_WindowPropagation
标志,以确保调色板被传播(或不)。根据我的经验,有时需要QWidget::update()
之后被调用。
更新:还有Qt::WA_SetPalette
属性用于启用/禁用单个小部件调色板更新。对于这种具体情况,我们需要将调色板传播到嵌套的小部件,就像作者在评论中所建议的那样。box->setPalette(window->palette()); box->setAttribute(WA_SetPalette, false);
。