QT StyleSheets;カラーフェード、2Dグラデーション、CSSクラス
-
04-10-2019 - |
質問
QTのStyleSheet機能についていくつか質問があります。本当に素晴らしいですが、機能がまだ長すぎないように感じます、本当ですか?しかし、これは私のGUIをスタイリングする最も簡単な方法です。
スタイルシートに色のフェージングを追加することは可能ですか?マウスが特定のウィジェットの上にホートするときはいつでも、背景色を突然変えたくないので、200msなどで新しい色にフェードするだけです。これに良い方法はありますか、それともこれをコード的に行う必要がありますか?
2Dグラデーションはありますか? 1Dグラデーションを使用する方法を知っています。1つの軸(多くの場合、水平または垂直に)で色を徐々に変えることができます。追加したいのですが 2番目 その上に、たとえばAlpha値が低いaがあります。したがって、グラデーションが緑(上)から赤(下)に到達した場合、透明(左)から白(右)に移動したいと思います。
QTには、タイプ(QPushbuttonなど)およびID(#MyWidgetNameなど)のCSSセレクターがありますが、クラスを選択または設定する方法は見つかりませんでした。たとえば、多くのQFramesがあり、特定のサブセットには、特定のスタイルを追加したいと思います。フレームをすべて同じ(同じID)に名前を付ける必要がありますか?悪いように聞こえます。しかし、それらのタイプ(qframe)で選択することも正しくありません...
ありがとうございました!
解決
私が知っているCSSを使用していません。ただし、QTには、さまざまな手法を使用して(アニメーションフレームワークを使用して)いくつかの素晴らしいデモがあります。たとえば、デモ/例ブラウザーを参照してください。
エンドポイントの相対座標を使用して、次の構造を使用することにより、おそらく#2で望むものを達成できます。
qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.273, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))
QTデザイナーには、グラデーション(および一般的なCSS向け)の優れたエディターがいます。これで遊んで、それが何であるかを確認し、インスピレーションのためにそれを使用することをお勧めします。
これを最もよく解決する方法はよくわかりませんが、同じルールの前に複数の試合を出すことができます。
QFrame#frame1, QFrame#frame2 { background-color: blue; }
他のヒント
これは非常に古い質問であることは知っていますが、最近も同様の問題がありました。
とにかく、「3」のためにQSSで「プロパティセレクター」を使用して、関連するウィジェットにプロパティ値を設定できることがわかりました。
たとえば、C ++コード:
widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );
次に、QSSで:
QWidget[StyleClass="MyCustomLAF"] { color : purple ; }
次に、「mycustomlaf」に設定された「styleclass」プロパティを備えたqwidget(または派生クラス)インスタンスは、紫色のスタイルが適用されます。次の説明が少し混乱しているか技術的に間違っている場合は私を許してください。しかし、私はプロパティ「styleclass」が(私の言葉では)qobjectインスタンスに追加されるプロパティを意味する「ダイナミックプロパティ」と呼ぶものであることを暗示しています実行時に、Q_Propertyマクロを使用して「メタスタッフ」に登録されることなく。
また、特定の親のすべてのQFrameを選択することもできます
#ParentName > QFrame
#ParentNameの子供であるすべてのQFramesを選択します
#ParentName QFrame
#ParentNameに含まれるすべてのQFramesを選択します。