2017-03-01 10 views
1

から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' 

私は新しいパレットがboxlabellabel2

をペイントするために使用されbox->setPalette(somePalette)をコールしていたのであれば今、私はこれを元に戻す、すなわちboxlabellabel2に私のデフォルトのパレットを使用したいのは簡単ですが、私はbox->setPalette(window->palette())と呼んでいますか?これで

問題は、私はそれはもはやlabellabel2boxを介して伝播windowのパレットを変更した場合boxはまだ技術的には、カスタムパレットセットを(それはあなたがそれを渡すパレットの深いコピーを作成)があります。

実際にパレットをboxから削除すると、パレットのプロパゲーションが復元されます。

答えて

1

パレットの伝播が復元されるように実際にパレットをボックスから削除するにはどうすればよいですか?

あなたは明示的にパレットが伝播する(またはしない)されていることを確認するように設定またはQt::WA_WindowPropagationフラグを削除するQWidget::setAttributeを使用することができます。私の経験から、後でQWidget::update()が必要になることがあります。

UPDATE:個々のウィジェットパレット更新を有効/無効にするためのQt::WA_SetPalette属性もあります。この特定のケースでは、パレットをネストされたウィジェットに伝播する必要があります。 box->setPalette(window->palette()); box->setAttribute(WA_SetPalette, false);

+0

docsは 'トップレベルのウィンドウに親からフォントとパレットを継承させます' 'box'はトップレベルのウィンドウではありません... – Troyseph

+0

' WA_SetPalette'ウィジェット属性が見つかりました。ウィジェットには独自のパレットがあります)。 – Troyseph

+0

'WA_SetPalette'はfalseに設定する必要がありますが、親のパレットと正確に一致するようにパレットを設定した後でなければなりません。 'box-> setPalette(window-> palette()); box-> setAttribute(WA_SetPalette、false); 'いいえ' update'は必要です! – Troyseph

関連する問題

 関連する問題