如何从Qwidget中删除QPALETTE



根据qt的qwidget文档:

Qwidget传播了从父母到孩子的明确调色板角色。如果您将刷子或颜色分配给调色板上的特定角色并将调色板分配给小部件,则该角色将向所有小部件的孩子传播,从而超过该角色的任何系统默认值。

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

QMainWindow 'window'
     |_QGroupBox 'box'
          |_QLabel 'label'
          |_QLabel 'label2'

所以,如果我打电话给box->setPalette(somePalette),新的调色板用于绘画boxlabellabel2

现在我想撤消此问题,即我要boxlabellabel2使用我的默认调色板,这很容易,我叫box->setPalette(window->palette()),对吗?

此问题是box仍然具有自定义调色板集(它可以使您通过它通过它的深度副本),如果我修改了window的调色板,它将不再通过box传播到labellabel2。P>

那么,我如何实际从box中删除调色板,以便恢复调色板的传感

我如何实际从框上删除调色板,以便调整调色板的传播?

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

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

相关内容

  • 没有找到相关文章

最新更新