Qt

Qtスタイルシートの詳細



Qt Style Sheets Detailed



再現 ちょいせん 2019-06-2611:27:47読書番号1185の最後の投稿 収集する

拡張



https://www.cnblogs.com/lsgxeva/p/7816938.html

1、 QTスタイルシートはじめに

1、QTスタイルシートはじめに

QSSの主な機能は、インターフェイスの要素と分離のインターフェイスを表示することです。これにより、スキンの設計と個別のソフトウェアインターフェイスコントロールが可能になります。



QTスタイルシートは、ユーザーがコンポーネントの外観をカスタマイズできる強力なメカニズムウィジェットです。さらに、サブクラスQStyleは、ウィジェットコンポーネントの外観をカスタマイズすることもできます。スタイルシートのQTの概念、用語、CSSカスケードスタイルシートに大きく影響される文法。

スタイルシートは、アプリケーションで提供されるQApplication :: setStyleSheet()を使用するか、QWidgetを使用します:: setStyleSheet()は、特定のコンポーネントとその子オブジェクトの記述で提供されます。

たとえば、次の表は、QLineEditが背景色として黄色を使用し、テキストの色を赤のQCheckBoxとして使用するスタイルを示しています。



QLineEdit {背景:黄色}

QCheckBox {色:赤}

このカスタマイズでは、QPaletteよりも強力なスタイルシートを使用します。たとえば、赤いボタンを取得するには、QPushButton QPalette :: Buttonロールを赤に設定できます。ただし、これはすべてのスタイルに有効であることを保証するものではありません。これは、構築のスタイルがこれらのさまざまなプラットフォームの原則とローカルテーマエンジンに制限されるためです。

すべてのカスタムQPaletteが実現するものを使用するのが困難または不可能なスタイルシートを実現できます。

黄色の背景、赤いテキストボタン、チェックボックス、またはゴージャスな必須フィールドが必要な場合は、スタイルシートを作成できます。

2、QTプログラミングスタイルシート

A、コードQSSで直接提供されます

QPushButton * button = new QPushButton(this)

ボタン-> setText( 'hello')

button-> setStyleSheet( 'QPushButton {color:blue}')

B、ファイルQSSを設定する

ファイル.qssへのQSSコード

.qssファイルからqrc.qrcのリソースファイルへ

QSS QSSアセンブリは、ファイルをコードで読み取るために破棄されました

QPushButton * button = new QPushButton(this)

ボタン-> setText( 'hello')

QFileファイル( ':/qss/dev.qss')

file.open(QIODevice :: ReadOnly)

QStringスタイルシート= QLatin1String(file.readAll())

ボタン-> setStyleSheet(スタイルシート)

file.close()

二、 QTスタイルシートの構文

用語と文法規則QTスタイルシートとHTMLCSSは非常に似ています。

1、 スタイルルール

スタイルルールのシーケンスによるスタイルシート。スタイルルールは、セレクターと宣言構成で構成されます。セレクターはルールの影響を受けるコンポーネントを指定し、宣言はどのプロパティがアセンブリに設定されるかを指定します。例えば:

QPushButton {色:赤}

上記のスタイルルールでは、QPushButtonはセレクターであり、{color:red}が宣言されています。スタイルルールはQPushButtonを指定し、そのサブクラスは前景色として赤を使用する必要があります。

QTスタイルシートでは、クラス名、オブジェクト名、QT属性名で大文字と小文字が区別されることを除いて、大文字と小文字は区別されません。

複数のセレクターは、コンマセレクターで区切ってステートメントで指定できます。たとえば、次のルール:

QPushButton、QLineEdit、QComboBox {色:赤}

3つのルールに相当します。

QPushButton {色:赤}

QLineEdit {色:赤}

QComboBox {色:赤}

スタイルルールのステートメントは、リストの「プロパティ:値」です。宣言セクション{}で、パーティションの異なる属性:値 '、たとえばセミコロン:

QPushButton {color:red margin:0px color:rgb(85、85、85)font-family:Arial、 'Arial Narrow'、arial、serif '> 2、セレクターのタイプ

これまでのところ、すべてのタイプの中で最も簡単な選択は使用例です。 QTスタイルシートは、定義されたすべてのCSS2セレクターをサポートします。次の表は、最も一般的な選択タイプをまとめたものです。

セレクタ

説明

ユニバーサルセレクター

*

一致するすべてのコンポーネント

タイプセレクター

QPushButton

すべてのサブクラスに一致するマシンの例QPushButton

属性セレクター

QPushButton [flat = 'false']

QPushButtonは、すべてのインスタンスの属性をフラットからfalseに一致させます。プロパティは静的属性と動的属性に分けられます。静的属性はQ_PROPERTY()を指定でき、動的属性はsetPropertyを使用して指定できます。

クラスセレクター

.QPushButton

例QPushButtonは、例外サブクラスを除いて一致します

IDセレクター

QPushButton#okButton

okButtonという名前のオブジェクトに一致するすべてのQPushButtonインスタンス

子孫セレクター

QDialog QPushButton

すべてのインスタンスに一致しますQPushButtonQDialog子孫

子セレクター

QDialog> QPushButton

すべてのインスタンスに一致するQDialogサブクラスオブジェクトQPushButton

3、 チャイルドコントロールセレクター

複雑なコンポーネントスタイルの場合は、上下の矢印ボタンやQSpinBoxのプルダウンQComboBoxなど、子コントロールのコンポーネントにアクセスする必要があります。セレクターには、コンポーネントに適用される特定のサブコントロールルールへの子コントロールを含めることができます。

QComboBox :: drop-down {画像:url(dropdown.png)}

ルールの上のドロップダウンボックスは、すべてのQComboBoxにスタイルルールを適用します。ダブルコロン::はCSS3疑似要素に似ていますが、子はセレクターQTを概念的に異なる方法で制御しますが、セマンティクスカスケードは異なります。

別の一般的に配置された参照要素に従った子制御セレクター。参照要素は、コンポーネントまたは別のサブコントロールセレクターにすることができます。たとえば、右上のQComboBox ::ドロップダウンはデフォルトの配置の長方形の素材です。 ::中央コンテンツのデフォルト配置のドロップダウン::ドロップダウンサブコントロールセレクター長方形。

属性を使用して、原点サブコントロール-原点長方形を変更できます。たとえば、長方形基板のデフォルトの外接長方形の代わりにドロップダウンに配置する場合は、次のように指定できます。

QComboBox {

マージン右:20px

}

QComboBox ::ドロップダウン{

サブコントロール-起点:マージン

}

境界長方形の配置サブコントロール内のドロップダウン-プロパティの変更による位置。サブコントロールセレクターのサイズを制御するためのプロパティと高幅属性。画像を設定すると、子コントロールセレクターのサイズが暗黙的に設定されることに注意してください。

相対測位方法(位置:相対)を使用すると、子はセレクターの位置偏差を元の位置に制御できます。たとえば、下ボタンがQComboBoxを押されたときに、次の方法で効果を達成できることを指定するためにaを押す必要があります。

QComboBox :: down-arrow {

画像:url(down_arrow.png)

}

QComboBox ::下矢印:押された{

位置:相対

上:1px左:1px

}

絶対測位方法(位置:絶対)を使用すると、子供のコントロールで、関連する参照要素の位置とサイズを選択および変更できます。

見つかったら、そのコンポーネントのようなボックスモデルのスタイルを使用できます。

QComboBoxやQScrollBarのような複雑なコンポーネントのように、属性が1つある場合、または子コントロールセレクターがカスタマイズされている場合は、他のすべてのプロパティまたは子コントロールセレクターもカスタマイズする必要があることに注意してください。

共通のセカンダリコントローラー:

::インジケータインジケータラジオボタン、チェックボックス、選択可能なメニュー項目またはオプションの項目のグループ

::メニューインジケーターメニューボタンインジケーター

::アイテムメニュー、メニューバーまたはステータスバーアイテム

スピナー::上ボタンまたはスクロールバー下ボタン

::下ボタンスクロールバーまたはスピナー上ボタン

::上ボタン上矢印スピナー、スクロールバーまたはタイトルビュー

::下矢印ボタン下スピナー、スクロールバーまたはタイトルビュー

::下矢印ドロップダウンコンボボックス

::タイトルグループボックスタイトル

4、 疑似セレクター

セレクターには、疑似状態コンポーネントのステータスルールが適用されることに基づく制限が含まれる場合があります。状態は、中間のセミコロンに接続された疑似セレクターの最後で発生します。たとえば、QPushButtonにカーソルを合わせるには、次のルールが使用されます。

QPushButton:hover {色:白}

疑似感嘆符の反転状態は、例えば、マウスがQRadioButtonにないときにホバーするために以下の規則が使用される場合があります。

QRadioButton:!hover {色:赤}

疑似状態ロジックは、次の方法で接続できます。たとえば、選択したQCheckBoxにカーソルを合わせると次のルールが適用されます。

QCheckBox:hover:checked {色:白}

疑似反転状態は、疑似状態チェーンで発生する可能性があります。たとえば、次のルールはQPsuButtonにカーソルを合わせるために使用されますが、押されていません。

QPushButton:hover:!pressed {color:blue}

必要に応じて、コンマまたはダミーの論理接続状態を使用できます。

QCheckBox:ホバー、QCheckBox:checked {色:白}

疑似状態制御は、バインダーを使用して選択できます。

QComboBox :: drop-down:hover {image:url(dropdown_bright.png)}

一般的なステータス:

:無効無効ウィジェット

:有効ウィジェットを有効にする

:フォーカスウィンドウには入力フォーカスメンバーがあります

:ウィンドウメン​​バーの上にマウスを置く

:マウスボタンクリックウィジェットを押した

:チェックボタンが選択されています

:チェックされていないボタンが選択されていない

:不定ボタン選択部分

:ウィンドウメン​​バーを開いた状態または展開した状態で開きます

:閉じた状態の閉じたウィンドウメン​​バーまたは破棄された

:ウィンドウメン​​バーのステータスはオンです

:ウィジェットのオフ状態

5、紛争管理

複数のスタイルルールがプロパティで複数の値を指定すると、競合が発生します。

QPushButton#okButton {色:灰色}

QPushButton {色:赤}

上記の2つのルールの例はQPushButtonokButtonと一致し、color属性に競合があります。競合を解決するために、考慮すべきセレクター機能。実施形態では、QPushBoon#okBontは、クラスのすべてのインスタンスではなく、単一のオブジェクトを指すので、QPushBoon#okBonは、QPushBankよりも具体的である。

同様に、ダミーセレクターはダミーの未指定セレクターよりも具体的です。したがって、次の表は、マウスをQPushButtonの上に置いたときのスタイル、QPushButtonテキストが白または赤の場合のスタイルを示しています。

QPushButton:hover {色:白}

QPushButton {色:赤}

厳密にする必要があります。

QPushButton:hover {色:白}

QPushButton:enabled {色:赤}

マウスをボタンの上に置くと、2つのセレクターの特性が同じになり、2番目のルールが優先されます。テキストを白くしたい場合は、ルールを並べ替える必要があります。

QPushButton:enabled {色:赤}

QPushButton:hover {色:白}

あるいは、最初のルールはより具体的かもしれません:

QPushButton:hover:enabled {色:白}

QPushButton:enabled {色:赤}

タイプを選択して使用すると、同様の問題が発生します

QPushButton {色:赤}

QAbstractButton {色:灰色}

QPushButton(QAbstractButtonから継承されたQPushButtonによる)の上記の2つのルールの例、およびcolorプロパティが競合しています。 QPushButtonはQAbstractButtonから継承されているため、QPushButtonはQAbstractButtonよりも具体的であると見なされます。ただし、スタイルシートの計算では、すべてのタイプのセレクターが同じ特性を持ち、優先順位ルールが最後に発生します。つまり、QPushButtonを構成するすべての色のQAbstractButtonプロパティが灰色に設定されます。 QPushButtonテキストを本当に赤にしたい場合は、通常、ルールを並べ替えます。

ルールの特性を決定するために、QTスタイルシートはCSS2仕様に従います。

選択した特性は次のように計算されます。

番号(= a)ID属性セレクターの計算

計算セレクターの疑似状態およびクラスの他の属性(= b)

セレクター要素を計算する数(= c)

ダミー要素(子コントロールセレクターなど)を無視する

3つの数字のシリーズa-b-cは特徴を示しています。

* {} / * a = 0 b = 0 c = 0->特異性= 0 * /

LI {} / * a = 0 b = 0 c = 1->特異度= 1 * /

UL LI {} / * a = 0 b = 0 c = 2->特異性= 2 * /

UL OL + LI {} / * a = 0 b = 0 c = 3->特異性= 3 * /

H1 + * [REL = up] {} / * a = 0 b = 1 c = 1->特異度= 11 * /

UL OL LI.red {} / * a = 0 b = 1 c = 3->特異性= 13 * /

LI.red.level {} / * a = 0 b = 2 c = 1->特異度= 21 * /

#x34y {} / * a = 1 b = 0 c = 0->特異性= 100 * /

6、 カスケード

QTスタイルシートは、アプリケーション、親コンポーネント、サブアセンブリで提供される場合があります。スタイルシートを取得すると、祖先(父、祖父など)をマージすることにより、事実上任意のコンポーネント、およびアプリケーションアセンブリ上の任意のスタイルシートを取得できます。

競合が発生すると、競合するルールの特性に関係なく、コンポーネント自体のスタイルシートスタイルシートが常に継承されたものよりも優先されます。同様に、スタイルシートの親要素は、スタイルシートの祖父コンポーネントよりも優先されます。

その結果、コンポーネントにスタイルルールを設定すると、スタイルシートスタイルシートまたは祖先優先度のアプリケーションコンポーネントで指定されている他のルールよりも自動的に高くなります。たとえば、最初のアプリケーション設定スタイルシートでは

qApp-> setStyleSheet( 'QPushButton {color:white}')

次に、オブジェクトはスタイルシートQPushButtonで提供されます

myPushButton-> setStyleSheet( '* {color:blue}')

QPushButtonスタイルシートはQPushButton(およびそのコンポーネントのいずれか)の青いテキストを強制しますが、スタイルシートの適用範囲はより具体的なルールを提供します。

次の文言でも同じ結果が得られます。

myPushButton-> setStyleSheet( 'color:blue')

ただし、QPushButtonサブアセンブリがある場合、サブアセンブリスタイルシートは効果的ではありません。

カスケードスタイルシートは複雑なテーマです。詳細については、CSS2仕様を参照してください。 QTは現在実装されていません。

7 、 継承

従来のCSSでは、フォントと色の要素が設定を表示しない場合、親コンポーネントから自動的に継承されます。 QTスタイルシートを使用する場合、コンポーネントは親コンポーネントのフォントと色の設定を自動的に継承しません。たとえば、QPushButtonで構成されるQGroupBoxは次のとおりです。

qApp-> setStyleSheet( 'QGroupBox {color:red}')

QPushButtonセットの色は表示されなかったため、親コンポーネントのQGroupBoxの色を継承しませんが、色のシステムがあります。次のように、色QGroupBoxのサブコンポーネントを設定します。

qApp-> setStyleSheet( 'QGroupBox、QGroupBox * {color:red}')

対照的に、QWidget :: setFont()およびQWidget :: setPalette()を使用すると、フォントが製図板およびサブアセンブリに設定されます。

8、 C ++名前空間の内部コンポーネント

スタイルタイプセレクター特定のタイプのコンポーネントのカスタマイズ。例えば:

クラスMyPushButton:public QPushButton {

//..。

}

//..。

qApp-> setStyleSheet( 'MyPushButton {背景:黄色}')

QObjectQTスタイルシートアセンブリ:: className()を使用して、いつセレクターを選択するかを決定します。アセンブリがカスタム名前空間内にある場合、QObject :: className()は::を返します。これにより、子セレクター構文コントロールとの競合が発生します。この問題を解決するには、名前空間タイプセレクターでコンポーネントを使用するときに、「::。」の代わりに「-」を使用する必要があります。

名前空間ns {

クラスMyPushButton:public QPushButton {

//..。

}

}

//..。

qApp-> setStyleSheet( 'ns--MyPushButton {background:yellow}')

9、 QObjectプロパティの設定

QT4.3は任意のQ_PROPERTYから開始し、qproperty-grammar設定を使用するように設計できます。

MyLabel {qproperty-pixmap:url(pixmap.png)}

MyGroupBox {qproperty-titleColor:rgb(100、200、100)}

QPushButton {qproperty-iconSize:20px 20px}

プロパティが列挙型Q_ENUMSステートメントを参照する場合、参照は数値ではなく名前による定数値である必要があります。

三、 QTデザイナースタイルシート

Qt Designerは、スタイルシートをプレビューし、任意のコンポーネントデザイナーを右クリックして、[スタイルシートの変更...]を選択するための優れたツールです。スタイルシートを設定できます。

QT4.2の開始、Qt Designerには、スタイルシート構文の強調表示とバリデーターが含まれています。構文が合法または違法である場合は、左下隅を示す[スタイルシートの編集]ダイアログボックスで確認できます。

wKioL1hqOeHQzX8uAABuZVArzzo582.png

[OK]または[適用]ボタンをクリックすると、QtDesignerは自動的に新しいスタイルテーブルを使用してコンポーネントを表示します。

四、 スタイルシートを使用してQTコンポーネントをカスタマイズする

スタイルシートを使用する場合、各コンポーネントは、空白の長方形、境界の長方形、長方形の基板、長方形のボックスの内容の4つの同心の長方形を持っていると見なされます。

1、 ボックスモデル

次の4つの同心長方形:

wKiom1hqOgejndJNAABhRmdmdHg832.png

margin、border-width、padding属性のデフォルトは0です。この時点で、4つの同一の長方形です。

背景のbackground-image属性で指定されたコンポーネントを使用できます。デフォルトでは、background-imageは境界矩形にのみ描画され、background-clipプロパティを使用して変更できます。 background-repeat属性とbackground-originプロパティを使用して、背景画像の繰り返しとソースを制御します。

background-imageプロパティは、コンポーネントのスケーリングされたサイズではありません。コンポーネントにスキンまたは背景のサイズスケーリングを提供するには、border-image属性を使用する必要があります。 border-imageプロパティは代替の背景を提供するため、指定されたborder-image属性が指定されていない場合のbackground-imageプロパティの要件。 background-imageプロパティとborder-image属性を指定すると、background-imageプロパティの上にborder-image属性が描画される場合があります。

さらに、画像属性を使用して、border-image属性に画像を描画できます。画像コンポーネントとしてのサイズが指定された画像と一致しない場合、拡大しない場合は、image-position属性を使用して位置合わせを提供できます。また、background-imageプロパティの異なるborder-image属性であるimage属性はSVGを指定するため、コンポーネントのサイズによって画像が自動的に作成されます。

ルールを次のようにレンダリングするには:

A、レンダリング操作全体のクリップ(境界半径)を設定します

B、背景を描く(background-image)

C、境界線の描画(border-image、border)

D、オーバーレイ画像(画像)のレンダリング

2、子供は制御します

コンポーネントは、サブコントロールツリーと見なすことができます。例えば。 QComboBoxドローダウンボタンチャイルドコントロール、チャイルドコントロールダウンボタンはドローダウン矢印チャイルドコントロール。

子コントロールは親子関係を楽しんでいます。 QComboBoxは、下矢印の父の下ボタン、ドロップダウンボタンの父QComboBoxコンポーネント自体です。子コントロールは、親コンポーネント内に配置された、使い慣れた属性サブコントロールオリジンをサブコントロール配置できます。

配置されると、子はボックスモデルのカスタムスタイルを使用できるように制御します。

QComboBoxやQScrollBarのような複雑なコンポーネントのように、属性が1つある場合、または子コントロールセレクターがカスタマイズされている場合は、他のすべてのプロパティまたは子コントロールセレクターもカスタマイズする必要があることに注意してください。

ファイブ、 QTスタイルシートリファレンス

QTスタイルシートは、可能なコンポーネントの外観をカスタマイズするさまざまな属性、ステータス、および子コントロールをサポートします。

1、コンポーネント

以下のコンポーネントは、スタイルシートスタイルを使用してカスタマイズできます。

パッケージ

スタイルの設定方法

QAbstractScrollArea

サポートボックスモデル。

QTextEditおよびQAbstractItemView(すべてのアイテムビュークラス)を含むすべての継承クラスQAbstractScrollAreaは、スクロール可能な背景をサポートし、background-attachmentを使用してスクロールするかどうかを設定します。背景アタッチメントは固定されて配置され、そのような背景画像ビューポート(ビューポート)スクロールではありません。 background-attachmentがスクロールするように配置されている場合は、スクロールバーを移動すると、background-imageがスクロールします。

参照例QAbstractScrollAreaカスタム。

QCheckBox

サポートボックスモデル。インジケーターは、スタイルを設定する::インジケーターの子コントロール(サブコントロール)を使用して選択できます。デフォルトでは、コンテンツコンポーネントの長方形の左上隅にあるインジケーター。

プロパティは、テキストと選択したステータスインジケータの間の間隔のギャップを指定します。

参照例QCheckBoxカスタム。

QColumnView

画像プロパティを使用して、収縮状態のスタイルを設定できます。矢印ポインタ(矢印インジケータ)は、::左矢印および::右矢印の子コントロールを使用してスタイルを設定できます。

QComboBox

コンボボックスフレーム(フレーム)ボックスモデルを使用して、スタイルを設定できます。ドロップダウンボタンは、::ドロップダウンの子コントロールを使用してスタイルを設定できます。デフォルトでは、ドロップダウンボタンは基板アセンブリの右上の領域に配置されています。マークするドロップダウン矢印ボタンは、::下矢印の子コントロールを使用してスタイルを設定できます。デフォルトでは、矢印の内容はドロップダウンボタンコントロールサブリージョンの中央に配置されます。

参照例QComboBoxカスタム。

QDialog

background、background-clip、background-originプロパティのみをサポートします。

警告:カスタムコンポーネントでQ_OBJECTマクロを定義してください。

QDialogBu​​ttonBox

button-layout属性のボタンレイアウトを使用して変更できます。

QDockWidget

ドッキング状態(ドッキング)では、タイトルバーボタンとタイトルバーのスタイル設定がサポートされます。

ドッキングアセンブリフレーム(境界線)の境界線プロパティを使用して、スタイルを設定できます。 ::タイトルの子コントロールを使用して、タイトルバーのスタイルを設定できます。閉じるボタンとサスペンションに関するボタン::タイトルサブコントロールの位置を使用しました::閉じるボタンと::フロートボタンを設定しました。タイトルバーが垂直の場合、次のように設定します:垂直疑似クラス。

さらに、QDockWidget :: DockWidgetFeatureの値の設定によると、:closable、:floatable、および:movablepseudo-stateです。

注:ハンドルのサイズをスタイルに変更するには、QMainWindow ::セパレーターを使用します。

警告:QDockWidgetがドッキングされていない場合、スタイルシートは無効です。

参照例QDockWidgetカスタム。

QFrame

サポートボックスモデル。

QT4.3はQLabelの最初からスタイルシートを設定し、QFrame :: frameStyleプロパティをQFrame :: StyledPanelに自動的に設定します。

参照例QFrameカスタム。

QGroupBox

サポートボックスモデル。 :: titleは、タイトルを使用して子コントロールのスタイルを設定できます。デフォルトでは、タイトルはQGroupBox :: textAlignmentプロパティを対象としています。

選択したQGroupBoxの場合、タイトルには選択したインジケーターが含まれます。 ::インジケーターインジケーターは、サブスタイルの設定を制御するために使用できます。間隔プロパティは、テキストとポインタの間の間隔を設定するために使用されます。

参照例QGroupBoxカスタム。

QHeaderView

サポートボックスモデル。スタイルを設定する子のコントロールの::断面図を使用するそれぞれのヘッダー領域。セクション子制御サポート:中間、:最初、:最後、1つだけ、

:次選択、:前選択、:選択、:チェック済み疑似状態。

スタイル設定する::上矢印および::下矢印の子コントロールを使用してインジケーターを並べ替えます。

参照例QHeaderViewカスタム。

QLabel

サポートボックスモデル。サポートされていません:ホバー疑似状態。

QT4.3は、QLabelの先頭から、スタイルシートを自動的にQFrame :: frameStyleプロパティをQFrame :: StyledPanelに設定します。

参照例カスタムQFrame(QLabel QFrameから継承)。

QLineEdit

サポートボックスモデル。

選択された色と背景のアイテムは、スタイル設定にselection-colorとselection-background-colorを使用しています。

文字パスワードは、スタイルを設定するためにlineedit-password-character属性を使用できます。

暗号マスク遅延lineedit-password-mask-delayを使用して、プロパティを変更できます。

参照例QLineEditカスタム。

QListView /

QListWidget

サポートボックスモデル。交互の行の色がオンになっている場合は、alternate-background-colorプロパティを使用して交互の色をスタイル設定します。

選択された色と背景のアイテムは、スタイル設定にselection-colorとselection-background-colorを使用しています。

選択動作は、show-decoration-selectedプロパティによって制御されます。

::子コントロールを使用するアイテムから、アイテムのQListViewをよりきめ細かく制御します。

スタイルのスクロール可能な背景の設定については、QAbsractScrollAreaを参照してください。

参照例QListViewカスタム。

QMainWindow

区切り文字スタイル設定のサポート。

QMainWindow区切り文字で使用されたときに生成されるQDockWidget ::スタイル設定されるセパレータの子コントロール。

参照例QMainWindowカスタム。

QMenu

サポートボックスモデル。

子コントロールを使用する個々のアイテム::スタイル設定するアイテム。疑似通常状態に加えて、アイテムサブコントロールは次をサポートします:選択済み、:デフォルト、:排他的および非排他的疑似状態。

チェックインジケーターの選択されたメニュー項目は、::インジケーターの子コントロールによってスタイル設定されます。

::セパレータセパレータは、スタイルを設定する子コントロールの使用です。

アイテムにサブメニューがある場合は、右矢印の矢印マークが使用され、左矢印のスタイルが設定されます。

::スクローラースクローラーを使用してスタイルを設定します。

::ティアオフは別のメニューを使用してスタイルを設定します。

参照例QMenuカスタム。

QMenuBar

サポートボックスモデル。プロパティは、メニュー項目間のギャップ間隔のサイズを指定します。

単回使用アイテム::子が制御するアイテムスタイル。

警告:Qt / Macプラットフォームでは、メニューバーは通常グローバルメニューバーのシステムに組み込まれています。この場合、スタイルシートは無効です。

参照例QMenuBarカスタム。

QMessageBox

messagebox-text-interaction-flags属性は、テキストメッセージボックスのインタラクティブモードを選択するために使用されます。

QProgressBar

サポートボックスモデル。プログレスバーの進行状況::チャンクはスタイル設定される子コントロールの使用をブロックします。進行状況ブロックがコンテンツ領域に表示されます。

プログレスバーでテキストを表示する場合は、text-alignプロパティを使用してテキストの場所を設定します。

不確定なプログレスバーの使用:不確定な疑似状態セット。

参照例QProgressBarカスタム。

QPushButton

サポートボックスモデル。サポート:デフォルト、:フラット、:チェック済み疑似状態。

メニュー付きのQPushButtonの場合、そのメニューインジケーターは、スタイルを設定する子コントロール:: menu-indicatorの使用です。ボタンの外観が使用できることを確認してください:およびPEN:疑似スタイリングされた閉じた状態。

警告:QPushButtonに対してだけbackground-colorを設定すると、borderプロパティが値に設定されるまでbackgroundが表示されない場合があります。これは、デフォルトで、QPushButtonがローカル境界線の背景色を完全にカバーするためです。例えば、

QPushButton {border:none}

参照例QPushButtonカスタム。

QRadioButton

サポートボックスモデル。子が制御する::インジケータースタイルを使用してインジケーターを選択します。デフォルトでは、インジケータアセンブリはコンテンツ領域の左上隅に配置されます。

間隔プロパティは、インジケーターと選択したテキストの間のギャップを指定します。

参照例QRadioButtonカスタム。

QScrollBar

サポートボックスモデル。コンテンツエリアはスライダーのスライド溝です。幅QScrollBarは、幅または高さの属性セットを使用します。方向を決定するには、:horizo​​ntalおよび:verticalpseudo-stateを使用します。

::スライダーを使用して子コントロールを処理してスタイルを設定します。スライダーのサイズに制限を設けるために、方向に最小幅または最小高さを設定します。

::ボタンスタイル設定の行を追加するために使用される行追加の子コントロール。デフォルトでは、ライン追加コントロールは、アセンブリのサブフレーム領域の右下隅に配置されます。デフォルトでは、中央のコントロールサブ::行の追加コンテンツ領域に配置された矢印。

::ラインボタンのスタイル設定を減らすために使用されるサブラインの子コントロール。デフォルトでは、サブラインはサブコントロールアセンブリフレーム領域の左上隅に配置されます。デフォルトでは、中央のコントロールサブサブラインコンテンツ領域に配置された矢印。

::サブページは、サブ領域を制御するために使用されます。スタイルに合わせて動作するスライダーを保存します。 :: add-pageスライダー領域スタイルセットで役割を果たすために使用される、子コントロールを追加します。

参照例QScrollBarカスタム。

QSizeGrip

幅、高さ、画像の属性をサポートします。

参照例QSizeGripカスタム。

QSlider

サポートボックスモデル。水平スライダーの場合、最小幅と高さの属性を指定する必要があります。垂直スライダーの場合、min-height属性とwidth属性を指定する必要があります。

スライダーシュートは::溝を使用してスタイリングします。デフォルトでは、コンテンツ領域はシュートアセンブリに配置されます。スライダースライダーの使用::子が制御するハンドルスタイル。子供はコンテンツエリアでシュートの動きを制御します。

参照例QSliderカスタム。

QSpinBox

QDateEdit

QDateTimeEdit

QDoubleSpinBox

QTimeEdit

スタイリングするフレームボックスモデルを使用してフレームを回転させます。

上ボタンと矢印を使用して、::上ボタンと::上矢印の子コントロールを使用してスタイルを設定できます。デフォルトでは、上ボタンアセンブリは塗りつぶし領域の右上隅に配置されます。サイズを明示的に設定しない場合、参照領域の高さの半分を占めます。上矢印は、コンテンツ領域の上ボタンの中央に配置されています。

下ボタンを押して矢印を使用します::下ボタンスタイル::下矢印と子コントロール。デフォルトでは、下ボタンアセンブリの右下隅が塗りつぶし領域に配置されます。サイズを明示的に設定しない場合、参照領域の高さの半分を占めます。下矢印は、コンテンツ領域の下ボタンの中央に配置されています。

参照例QSpinBoxカスタム。

QSplitter

サポートボックスモデル。スプリッターは、::ハンドルを使用して子コントロールを処理します。

参照例QSplitterカスタム。

QStatusBar

背景属性のみをサポートします。子が制御する::アイテムスタイルを使用した個々のアイテムのフレームワーク。

参照例QStatusBarカスタム。

QTabBar

単一のタグ::タブの子コントロールを使用してスタイルを設定します。閉じるボタン使用::子が制御する閉じるボタンスタイル。タグは、1つ、:最初、:最後、:中間、:前に選択、:次に選択、:選択された疑似状態のみをサポートします。

ラベルの方向:上、:左、:右、:下の疑似状態かどうかを判断します。

負のマージンまたは絶対位置モードを使用して作成された、選択したオーバーラップラベル。

個別のインジケーターQTabBarの使用::子が制御するティアスタイル。

QTabBar使用される2つのQToolButtonsスクローラーQTabBarQToolButtonはセレクターのスタイルを設定します。 ::スクロールボタンの子を使用するスクローラーは、指定された幅を制御します。

配置プロパティセットを使用したタグQTabBarの配置。

警告:QTabBar QTabWidgetの位置を変更するには、タブバーの子コントロールを使用します。

参照例QTabBarカスタム。

QTabWidget

子が制御するラベル::ペインスタイルを使用したフレームアセンブリ。 :: left-cornerと:: right-cornerを使用して、それぞれ左隅と右隅に角度を付けてスタイルを設定します。ラベリングストリップの位置を使用する::タブバーサブコントロールコントロール。

デフォルトでは、子コントロールQTabWidgetの場所は、QWindowsStyleスタイルに従って決定されます。中央の場所に配置されたQTabBarには、subcontrol-position属性tab-barサブコントロールが提供されます。

方向タググループがあるかどうかを判別します:上、:左、:右、:下の疑似状態。

参照例QTabWidgetカスタム。

QTableView

サポートボックスモデル。機能が交互の行の色でオンになっている場合は、alternate-background-color属性セットスタイルを使用して色を交互に切り替えます。

選択された色と背景のアイテムは、selection-colorとselection-background-colorを使用してスタイルを設定しています。

QTableViewQTableCornerButton ::セクションセレクターを使用して、コーナーアセンブリQAbstractButtonによって実現されるQTableViewのスタイルを設定します。

警告:QTableCornerButtonで背景色のみを設定した場合、borderプロパティが値に設定されるまで背景が表示されない場合があります。これは、デフォルトでは、QTableCornerButtonのローカル境界線が背景色を完全にカバーするためです。

グリッドgridline-color属性セットの色を使用します。

スクロール可能な背景を設定する方法については、QAbsractScrollAreaを参照してください。

参照例QTableViewカスタム。

QTextEdit

サポートボックスモデル。

テキストの色と背景を選択して、selection-colorとselection-background-colorを使用してスタイルを設定しました。

スクロール可能な背景を設定する方法については、QAbsractScrollAreaを参照してください。

QToolBar

サポートボックスモデル。

上、左、右、下の疑似状態があるかどうかを決定するために配置されたツールバーの領域(停止方向)。

:最初、:最後、:中央、:のみ-ツールバーの位置を示す1つの疑似状態が線形グループです(QStyleOptionToolBar :: positionWithinLineを参照)

QToolBar区切り文字::子が制御するセパレータスタイル。

::ハンドルスタイルを使用してツールバーの移動を処理するには、子が制御します。

参照例QToolBarカスタム。

QToolButton

サポートボックスモデル。

QToolButtonメニューがある場合、:: menu-indicatorメニューインジケーターのスタイル設定に使用される子コントロール。デフォルトでは、ポインタは塗りつぶしアセンブリの右下隅に配置されているメニュー領域です。

QToolButtonがQToolButton :: MenuButtonPopupモードの場合、::メニューボタンの子コントロールはメニューボタンの描画に使用されます。 ::メニュー矢印子コントロールは、内部のメニューボタンにメニュー矢印を描画するために使用されます。デフォルトでは、子の中央にあるメニューボタンがコンテンツ領域を制御します。

QToolButtonの矢印が表示されたら、::上矢印、::下矢印、::左矢印、および::右矢印の子コントロールを使用します。

警告:背景色QToolButtonのみの場合、borderプロパティが値に設定されるまで背景が表示されない場合があります。これは、デフォルトで、QToolButtonのローカル境界線が背景色を完全にカバーするためです。例えば、

QToolButton {border:none}

参照例QToolButtonカスタム。

QToolBox

サポートボックスモデル。

単一のタグ::タブの子コントロールを使用してスタイルを設定します。タグのサポート:のみ-1 、:最初、:最後、:中間、:前に選択、:次に選択、:選択された疑似状態。

QToolTip

サポートボックスモデル。不透明度プロパティは、ツールチップの透明度を制御します。

参照例カスタムQFrame(QToolTipはQFrameです)。

QTreeView

QTreeWidget

QTableWidget

サポートボックスモデル。機能が交互の行の色でオンになっている場合は、alternate-background-color属性セットスタイルを使用して交互の色を使用します。

背景色と選択されたアイテムは、selection-colorとselection-background-colorを使用してスタイルを設定しています。

選択動作は、show-decoration-selectedプロパティによって制御されます。

子コントロールのツリービューのブランチは、::ブランチを使用してスタイルを設定します。 ::ブランチ子制御のサポート:open、:closed、:has-sibling、および:has-children疑似状態。

:: QTreeの子コントロールを使用するアイテムよりきめ細かいコントロールのアイテムを表示します。

スクロール可能な背景を設定する方法については、QAbsractScrollAreaを参照してください。

ブランチスタイルを設定する方法については、QTreeViewの例のカスタマイズを参照してください。

QWidget

background、background-clip、background-originプロパティのみをサポートします。

QWidgetサブクラスの場合、カスタムコンポーネントに描画イベントハンドラー(paintEvent)を提供する必要があります。

void CustomWidget :: paintEvent(QPaintEvent *)

{{

QStyleOption opt

opt.init(this)

QPainter p(this)

style()-> drawPrimitive(QStyle :: PE_Widget、&opt、&p、this)

}

スタイルシートがない場合、上記のコードは効果がありません。

警告:カスタムコンポーネントでQ_OBJECTマクロを定義してください。

6、 QTスタイルシートの例

1、 スタイルシートの使用

A、カスタムの前景色と背景色

QLineEditアプリケーションを黄色に設定する背景色のすべてのコンポーネント

qApp-> setStyleSheet( 'QLineEdit {

特定のサブクラスコンポーネントとQLineEditダイアログボックスに属性を付ける場合。

myDialog-> setStyleSheet( 'QLineEdit {

特定の属性QLineEditコンポーネントのみが必要な場合は、QObject :: setObjectName()およびIDセレクターを使用できます。

myDialog-> setStyleSheet( 'QLineEdit#nameEdit {

セレクターを無視して、背景色プロパティQLieEditアセンブリを直接提供される場合があります

nameEdit-> setStyleSheet( '

コントラストを確保するために、テキストは適切な色を指定する必要があります

nameEdit-> setStyleSheet( 'color:blue

選択したテキストの色を次のように変更します。

nameEdit-> setStyleSheet( 'color:blue'

''

「選択色:黄色」

'選択-')

B、動的プロパティを使用したカスタムスタイル

ユーザーフィールドが必須であることを確認するには、これらのフィールドの背景色として黄色を使用します。 QTスタイルシートを使用するのは本当に簡単です。まず、スタイルシートアプリケーションを使用する必要があります。

* [MandatoryField = 'true'] {マージン:0pxクリア:両方の高さ:自動オーバーフロー:非表示の色:rgb(85、85、85)font-family:Arial、 'Arial Narrow'、arial、serif text-indent:28px text-align:justify '>これは、mandatoryFieldフィールドが背景色が黄色のtrueコンポーネントに設定されていることを意味します。

必須コンポーネントフィールドごとに、急いで作成しただけで、mandatoryFieldプロパティがtrueに設定されています。

QLineEdit * nameEdit = new QLineEdit(this)

nameEdit-> setProperty( 'mandatoryField'、true)

QLineEdit * emailEdit = new QLineEdit(this)

emailEdit-> setProperty( 'mandatoryField'、true)

QSpinBox * ageSpinBox = new QSpinBox(this)

ageSpinBox-> setProperty( 'mandatoryField'、true)

C、ボックスモデルのカスタムQPushButtonを使用

このセクションでは、赤いボタンを作成する方法を示します。

QPushButton#evilButton

{{

ボーダースタイル:冒頭

ボーダー幅:2px

ボーダー半径:10px

ボーダーカラー:ベージュ

フォント:太字14px

最小幅:10em

パディング:6px

}

QPushButton#evilButton:pressed

{{

ボーダースタイル:はめ込み

}

D、カスタムメニューボタンインジケーターの子コントロール

子は、その子要素へのアクセスを制御します。たとえば、ボタンはQPushButton :: setMenu()インジケーターメニューとコンテキストメニューを使用します。次のようなカスタムの赤いボタンメニューインジケーター:

QPushButton#evilButton :: menu-インジケーター

{{

画像:url(myindicator.png)

}

デフォルトでは、メニューポインタは素材の右下の領域に配置されています。サブコントロールの位置を変更することにより、サブコントロールの起点属性インジケーターを配置できます。

QPushButton :: menu-インジケーター

{{

画像:url(myindicator.png)

サブコントロール位置:右中央

サブコントロール-起源:パディング

左:-2px

}

素材領域の右ボタンの中央にあるMyindicator.pngの位置。

E、複雑なサンプルセレクター

アプリケーションスタイルシートのQLineEditテキストを赤で設定します。

QLineEdit {色:赤}

ただし、読み取り専用のQLineEditを次のように灰色に設定するテキストの色は次のとおりです。

QLineEdit {色:赤}

QLineEdit [readOnly = 'true'] {色:灰色}

場合によっては、登録フォームですべてのQLineEditが茶色である必要があります。

QLineEdit {色:赤}

QLineEdit [readOnly = 'true'] {色:灰色}

#registrationDialog QLineEdit {色:茶色}

すべてのダイアログQLineEditを茶色にする必要がある場合。

QLineEdit {色:赤}

QLineEdit [readOnly = 'true'] {色:灰色}

QDialog QLineEdit {色:茶色}

二、 カスタマイズされた特別なコンポーネント

このセクションでは、カスタムスタイルシートで使用される特定のコンポーネントの例を示します。

(1)、カスタムQAbstractScrollArea

背景任意のQAbstractScrollAreaアセンブリ(アイテムビュー、QTextEdit、QTextBrowser)は、bakcgroundプロパティで使用できます。たとえば、次のようにFIGプロパティをスクロールするためのスクロールバーを備えた背景:

QTextEdit、QListView

{{

背景画像:url(draft.png)

背景-添付ファイル:スクロール

}

ビューポートの背景画像固定プロパティの場合。

QTextEdit、QListView

{{

背景画像:url(draft.png)

背景-添付ファイル:修正済み

}

(2)、カスタムQCheckBox

QRadioButtonを使用したQCheckBoxスタイル設定は、同じスタイルに設定されます。主な違いは、3ステートのQCheckBoxブラー状態があることです。

QCheckBox

{{

間隔:5px

}

QCheckBox :: indicator

{{

幅:13px

高さ:13px

}

QCheckBox :: Indicator:unchecked

{{

画像:url(:/ images / checkbox_unchecked.png)

}

QCheckBox :: Indicator:unchecked:hover

{{

画像:url(:/ images / checkbox_unchecked_hover.png)

}

QCheckBox :: Indicator:unchecked:pressed

{{

画像:url(:/ images / checkbox_unchecked_pressed.png)

}

QCheckBox :: Indicator:checked

{{

画像:url(:/ images / checkbox_checked.png)

}

QCheckBox ::インジケーター:チェック済み:ホバー

{{

画像:url(:/ images / checkbox_checked_hover.png)

}

QCheckBox :: Indicator:checked:pressed

{{

画像:url(:/ images / checkbox_checked_pressed.png)

}

QCheckBox :: Indicator:indeterminate:hover

{{

画像:url(:/ images / checkbox_indeterminate_hover.png)

}

QCheckBox :: Indicator:indeterminate:pressed {

画像:url(:/ images / checkbox_indeterminate_pressed.png)

}

(3)、カスタムコンボボックスQComboBox

QComboBox {

ボーダー:1pxソリッドグレー

ボーダー半径:3px

パディング:1px 18px 1px 3px

最小幅:6em

}

QComboBox:編集可能{

背景:白

}

QComboBox :!編集可能、QComboBox ::ドロップダウン:編集可能{

背景:qlineargradient(x1:0、y1:0、x2:0、y2:1、

停止:0#E1E1E1、停止:0.4#DDDDDD、

停止:0.5#D8D8D8、停止:1.0#D3D3D3)

}

/ *ポップアップが開いているとき、QComboBoxは「オン」状態になります* /

QComboBox:!editable:on、QComboBox :: drop-down:editable:on {

背景:qlineargradient(x1:0、y1:0、x2:0、y2:1、

停止:0#D3D3D3、停止:0.4#D8D8D8、

停止:0.5#DDDDDD、停止:1.0#E1E1E1)

}

QComboBox:on {/ *ポップアップが開いたときにテキストをシフトします* /

パディングトップ:3px

パディング-左:4px

}

QComboBox ::ドロップダウン{

サブコントロール-起源:パディング

サブコントロール位置:右上

幅:15px

border-left-width:1px

border-left-color:darkgray

border-left-style:実線/ *単一の線* /

border-top-right-radius:3px / * QComboBoxと同じ半径* /

border-bottom-right-radius:3px

}

QComboBox :: down-arrow {

画像:url(/usr/share/icons/crystalsvg/16x16/actions/1downarrow.png)

}

QComboBox :: down-arrow:on {/ *ポップアップが開いているときに矢印をシフトします* /

上:1px

左:1px

}

ポップアップメニューのコンボボックスはQAbstractItemViewで、子孫セレクターを使用してスタイルを設定します。

QComboBox QAbstractItemView {

ボーダー:2pxソリッドダークグレー

選択-

}

(4)、カスタムQDockWidget

QDockWidgetのタイトルバーとボタンは、次のように設定できます。

QDockWidget

{{

ボーダー:1pxソリッドライトグレー

titlebar-close-icon:url(close.png)

タイトルバー-通常-アイコン:url(undock.png)

}

QDockWidget :: title

{{

text-align:left / *テキストを左に揃えます* /

背景:ライトグレー

パディング-左:5px

}

QDockWidget :: close-button、QDockWidget :: float-button

{{

ボーダー:1pxソリッド透明

背景:darkgray

パディング:0px

}

QDockWidget :: close-button:hover、QDockWidget :: float-button:hover

{{

背景:灰色

}

QDockWidget :: close-button:pressed、QDockWidget :: float-button:pressed

{{

パディング:1px -1px -1px 1px

}

左の停止ボタンアセンブリに移動するには、スタイルシートを次のように使用できます。

QDockWidget

{{

ボーダー:1pxソリッドライトグレー

titlebar-close-icon:url(close.png)

タイトルバー-通常-アイコン:url(float.png)

}

QDockWidget :: title

{{

text-align:左

背景:ライトグレー

パディング-左:35px

}

QDockWidget :: close-button、QDockWidget :: float-button

{{

背景:darkgray

パディング:0px

icon-size:14px / *最大アイコンサイズ* /

}

QDockWidget :: close-button:hover、QDockWidget :: float-button:hover

{{

背景:灰色

}

QDockWidget :: close-button:pressed、QDockWidget :: float-button:pressed

{{

パディング:1px -1px -1px 1px

}

QDockWidget :: close-button

{{

サブコントロール位置:左上

サブコントロール-起点:マージン

位置:絶対

上:0px左:0px下:0px

幅:14px

}

QDockWidget :: float-button

{{

サブコントロール位置:左上

サブコントロール-起点:マージン

位置:絶対

上:0px左:16px下:0px

幅:14px

}

(5)、カスタムQFrame

QFrame、QLabel、QToolTip

{{

ボーダー:2px無地の緑

ボーダー半径:4px

パディング:2px

背景画像:url(images / welcome.png)

}

(6)、カスタムQGroupBox

QGroupBox

{{

背景色:qlineargradient(x1:0、y1:0、x2:0、y2:1、

停止:0#E0E0E0、停止:1 #FFFFFF)

ボーダー:2pxソリッドグレー

ボーダー半径:5px

margin-top:1ex / *タイトル用に上部にスペースを残します* /

}

QGroupBox :: title

{{

サブコントロール-起点:マージン

subcontrol-position:上部中央/ *上部中央の位置* /

パディング:0 3px

背景色:qlineargradient(x1:0、y1:0、x2:0、y2:1、

停止:0#FF0ECE、停止:1 #FFFFFF)

}

QGroupBox :: indicator

{{

幅:13px

高さ:13px

}

QGroupBox :: Indicator:unchecked

{{

画像:url(:/ images / checkbox_unchecked.png)

}

(7)、カスタムQHeaderView

QHeaderView :: section

{{

背景色:qlineargradient(x1:0、y1:0、x2:0、y2:1、

停止:0#616161、停止:0.5#505050、

停止:0.6#434343、停止:1#656565)

色:白

パディング-左:4px

ボーダー:1pxソリッド#6c6c6c

}

QHeaderView :: section:checked

{{

背景色:赤

}

QHeaderView ::下矢印

{{

画像:url(down_arrow.png)

}

QHeaderView :: up-arrow

{{

画像:url(up_arrow.png)

}

(8)、カスタムQLineEdit

ボックスフレームモデルのQLineEditスタイリングを使用します。

QLineEdit

{{

ボーダー:2pxソリッドグレー

ボーダー半径:10px

パディング:0 8px

背景:黄色

選択-背景-色:darkgray

}

QLineEditを使用したQLineEdit文字パスワード::パスワード表示モード設定。

QLineEdit [echoMode = '2']

{{

lineedit-password-character:9679

}

読み取り専用のQLineEditバックグラウンドは、次のように変更できます。

QLineEdit:読み取り専用

{{

背景:水色

}

記事へのリンクを参照できます:

http://9291927.blog.51cto.com/9281927/1888380/

http://9291927.blog.51cto.com/9281927/1888395

http://9291927.blog.51cto.com/9281927/1888400

http://blog.csdn.net/goforwardtostep/article/details/60884870

http://blog.csdn.net/GoForwardToStep/article/details/64169734

http://blog.csdn.net/GoForwardToStep/article/details/65451416