2011-01-09 27 views
5

私はQMdiSubWindowのタイトルバーをカスタマイズしたいと思います。 私はqssを使用しています。qssでQMdiSubWindowのタイトルバーをカスタマイズするには?

QMdiSubWindow { border: 1px solid #000000; background: #000000 } 
QMdiSubWindow:title { background: #000000 } 

問題がこのqssを適用すると、ウィンドウアイコンが消えます。 私はQMdiSubWindowのためにそれを定義する方法を見つけることができませんしかし、それはQDockWidget

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... } 

ためQSSでこれらのアイコンを定義することが可能です知っています。 おそらく、この方法は存在しません。 可能かどうかは分かりますか?

+0

これは長年の問題です。 MDIチャイルドをスタイルするための回避策はありますか? – cytrinox

答えて

1

Qt 5.2以降はできません。 5.3をチェックしていませんが、5.3リリースのQMdiArea/QMdiSubWindowでAFAIKは何も変更していません。

最も簡単な解決策はQCommonStyleを使用し、QPainterを使用してタイトルバーをペイントすることです。詳細については、QCommonStyleQStyleのドキュメントを参照してください。あなたのスタイルクラスにはQCommonStyleで、QStyleでないことが推奨されます。 QCommonStyleQStyleを継承しています。

そして、あなたは、サブウインドウ上、このようなドロップシャドウなどのより複雑な効果を達成したいならば、あなたはここに残っている唯一のオプションは、QMdiSubWindowQMdiAreaを導き出すQMdiSubWindow派生クラスでQWidget::setWindowFlags(Qt::FramelessWindowHintflag)を呼び出し、ゼロから独自のサブウィンドウを実装することですあなた自身のタイトルバーで。タイトルバーの色をQSSからカスタマイズするには、Q_PROPERTYをタイプQColorと定義し、QSSのものにアクセスしてください(hereなど)。

別のオプションは、最初から新しいMDIエリアウィジェットを作成することですが、これはあなたのケースでは当てはまりません。カスタムスタイルを使用してタイトルバーをカスタマイズする必要がある場合は、取り組むことができる最善の方法です。トラブルの例がこの投稿の編集として提供されている場合。

QMdiSubWindowQSSとしてカスタマイズしたい場合は、残念ながら現時点では不可能です。

+1

良い解決策と思われます、ありがとう。 – cytrinox

関連する問題