からQPaletteを削除するには:はどのように<a href="http://doc.qt.io/qt-5/qwidget.html" rel="nofollow noreferrer">Qt's QWidget documentation</a>によるとQWidgetの
QWidgetのは、親から子への明示的なパレットの役割を伝播します。パレット上の特定のロールにブラシまたはカラーを割り当ててそのパレットをウィジェットに割り当てると、そのロールはすべてのウィジェットの子に伝播し、そのロールのシステムデフォルトを上書きします。
私はウィジェット階層を持っている:
QMainWindow 'window'
|_QGroupBox 'box'
|_QLabel 'label'
|_QLabel 'label2'
私は新しいパレットがbox
、label
とlabel2
をペイントするために使用されbox->setPalette(somePalette)
をコールしていたのであれば今、私はこれを元に戻す、すなわちbox
、label
、label2
に私のデフォルトのパレットを使用したいのは簡単ですが、私はbox->setPalette(window->palette())
と呼んでいますか?これで
問題は、私はそれはもはやlabel
とlabel2
にbox
を介して伝播window
のパレットを変更した場合box
はまだ技術的には、カスタムパレットセットを(それはあなたがそれを渡すパレットの深いコピーを作成)があります。
実際にパレットをbox
から削除すると、パレットのプロパゲーションが復元されます。
docsは 'トップレベルのウィンドウに親からフォントとパレットを継承させます' 'box'はトップレベルのウィンドウではありません... – Troyseph
' WA_SetPalette'ウィジェット属性が見つかりました。ウィジェットには独自のパレットがあります)。 – Troyseph
'WA_SetPalette'はfalseに設定する必要がありますが、親のパレットと正確に一致するようにパレットを設定した後でなければなりません。 'box-> setPalette(window-> palette()); box-> setAttribute(WA_SetPalette、false); 'いいえ' update'は必要です! – Troyseph