1

根据Qt 的 QWidget 文档

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

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

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

所以如果我要调用box->setPalette(somePalette)新的调色板来作画boxlabel并且label2

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

这个问题在box技术上仍然有一个自定义调色板集(它会复制你传递给它的调色板),如果我修改window它的调色板不再传播boxlabeland label2

那么,我如何实际删除调色板box以便恢复调色板传播?

4

1 回答 1

1

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

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

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

于 2017-03-01T15:40:48.150 回答