Qtに関する覚え書き[装飾とスタイル]

装飾とスタイルについて

装飾の基本

背景色・文字色・境界線などはスタイルシートで指定します。
スタイルシートを重複して指定すると後者優先になります。
対象ウィジェットに関するすべての指定は、1つのsetStyleSheetで記述する必要があります。

指定方法はウェブで使われるCSSとほとんど同じですが、微妙に違うところもあります。
例えば境界線(border)をまとめて指定する場合は、太さ・スタイル・色の順番に並べないと 無視されるようです。

全体の設定

例として、すべてのQLineEditの背景色を黄色にします。
※QLineEdit以外はデフォルトの背景色になります。
※アプリケーション(qApp)を指定するとすべてのウインドウが対象になります、多分。

個別の設定

個別のウィジェットの色やスタイルを指定します。


※行編集ウィジェットは背景色・文字色・選択色を設定しています。
※ラベルウィジェットは背景色・文字色・境界線・角の丸みを設定しています。

影響範囲について

子要素に対する影響

親のスタイルシートを設定すると、子要素もそれに従います。
スタイルシートにオブジェクト名を指定すれば子要素に影響を与えません。

テスト用のダイアログを作って影響を調べます。

※QWidget(widget)とQLineEdit(editPos)にオブジェクト名を付けます。

QWidgetの境界線1

widgetに境界線(2px・実線・黒)を設定します。
widgetだけではなく、子要素すべてに境界線が付きます。

QWidgetの境界線2

widgetのオブジェクト名を指定して境界線(2px・実線・黒)を設定します。
 widget  

 
※オブジェクト名はユニークな名前なので、クラス名(QWidget)は不要かもしれません。

クラスの一括指定

ダイアログ上のすべてのQLineEditの背景色を黄色にします。
ただし、オブジェクト名がPositionのものは水色にします。

※[閉じる]ボタンはQPushButtonクラスなので背景色が変わりません。

見えないクラス

QWidgetのように表面に現れないクラスを指定すると、予想外の結果になることがあります。

例えば、テスト用ダイアログでQWidgetを指定して境界線(黒・実線・2px)を設定します。
 QWidget1(widget)1
   

QWidget

背景画像スクロール

背景画像スクロール

QTextEditとQListViewの背景に画像を表示します。スクロールすると画像も一緒に動きます。

背景画像を固定表示にするとスクロールしても画像が動きません。
※attachmentを省略するとscrollになります。

no-repeatを省略すると背景画像をタイル表示します。
※この猫画像は写真素材足成様(http://www.ashinari.com/)のフリー素材です。

チェックボックスの装飾

インジケーター変更

インジケーター(チェックを入れる四角い枠)の画像を変更します。
チェックボックスを3択にすると、オフとオンの間に不定(未確定)が入ります。
1回押すごとに、オフ→不定→オン→オフ・・・と順番に切り替わります。



13x13
   
   
すべてのチェックボックスのインジケーター画像を変更します。
※画像と文字の間隔は5pxで、画像の表示サイズは縦横13pxです。
※ラジオボタンのインジケーターも同じように設定できます。

単独のチェックボックスの場合

cboxのインジケーターだけ画像を変更します。
※スタイルシートの内容は上と同じですが、QCheckBox:を省略できます。
※setTristateでtrueを指定すると3択になります。 指定しないかfalseの場合はオンとオフの切り替えになります。

コンボボックスの装飾

装飾の基本

 
 QAbstractItemView  
(1px)  
さらに、文字入力が可能な場合は入力領域の背景色を緑色にします。
メニューを開いている時は、文字の表示位置を少し右下にずらします。




 
 setEditable  

いろいろな変更

 使




 
 28px
 3px
 (2px)()  
※文字入力が可能な場合は右側のボタン部分だけ 横に押し縮めた感じのグラデーションになります。
※メニューを開いた時に画像の位置が1pxだけ右下に移動します。

フレームの装飾

装飾の基本

個別のフレームはオブジェクト名を指定してスタイルシートを設定します。
すべてのQFrameに共通の設定をする場合はクラス名(QFrame)を指定します。

例として、フレームにラベルとエディタを置いて背景色を黄色にします。


さらに、境界線(2px・実線・緑・角丸)を指定して、背景にリソース画像を表示します。
※1行目のオブジェクト名を指定したスタイルシートを省略すると、背景は親の色になります。

グループボックスの装飾

装飾の基本

 
 調
3  
※背景色が上にはみ出した感じになります。
※境界線や余白なども設定して枠内に収まるように調整する必要があります。


調整の例として、グループボックスとタイトルの背景色にグラデーションを設定します。
 
   

インジケーターの変更

ラジオボタンもチェックボックスのようにインジケーター画像を変更できます。
※テスト中です。

リストウィジェットの装飾

装飾の基本

選択色とフォーカスを失った時の色と1行おきの背景色が指定できます。
リスト関係のQListView, QTreeView, QTableViewなども同じように指定できると思います、 試していませんが。

例として、リストウィジェットに4つのアイテムを入れ、1行おきの背景色と選択表示を指定します。
 setAlternatingRowColorstrue1
   

いろいろな変更

前述の変更に加えて、選択時の境界線と背景色などアイテム関係の指定をします。
 
 
     

メニューバーの装飾

装飾の基本

メニューの背景色やメニューを開いた時のスタイルなどが指定できます。

例として、背景色をグラデーションにして、 メニューを開いた時のアイテムの背景色などを指定します。
※selectedとpressedは、チェックボックスの:hoverとコンボボックスの:onの動作に対応します。

左がデフォルトで右が設定後の表示です。


メニューの装飾

装飾の基本

 
 
 
4  
 QAction
   2  


 exclusivenon-exclusive
 exclusive
 itemtransparentitem:selectedalpha150  
 
 itempadding-left調  

プログレスバーの装飾

装飾の基本

テキスト位置や詰め要素(chunk)が指定できます。位置を省略すると左上になります。
角丸を指定した時は必ず境界線も指定したほうがよさそうです。

例として、標準のプログレスバーと同じように、テキストを右外側に表示して 詰め要素の間にスペースを入れます。
※テキストを外側に出すために右マージンを広く設定しています。

位置をcenterにして右マージンを省略すると中央にテキストを表示します。
centerを指定すると、マージンを含む横幅の中央にテキストを表示します。
角丸を指定しても境界線がないと、100%になった時に角丸がなくなります。


プッシュボタンの装飾

装飾の基本

背景色やフォントや境界線などの指定ができます。

[閉じる]ボタンの修飾

例として、背景色を赤に変更します。


角を丸めたりいろいろな設定をします。さらにボタンを押している時のスタイルも設定します。
※ボタン上でマウスの左ボタンを押している間は背景色が黒になります。離すと赤に戻ります。

メニューボタンの装飾

テスト用のメニューボタンを作ります。
※スタイルシートは前述のものを詰めて記述しただけです。
※マウスのボタンを離しても背景色は黒のままで、メニューが消えれば赤に戻ります。


メニューボタンのインジケーター画像(▼)を変更し、位置を右側の中央にします。
※画像の位置を左に4px微調整しています。
※画像はリソースに登録済みのmouse01.pngを使っています。

グラデーション

通常のボタンとフラットボタンの背景を縦方向のグラデーションにします。
ボタンを押してない時は上側が明るいグラデーションになります。 押している間は下側が明るくなります。
デフォルトボタンでフォーカスがある時は境界線が紺色になります。
setFlatをtrueにするとフラットボタンになるので境界線がなくなります。


メニュー付きボタンのグラデーション

ボタンの背景をグラデーションにして、インジケーター画像を変更します。
 
 
 
 


pressedopen  

スクロールバーの装飾

装飾の基本

 (sub-line)(add-line)
 (sub-page)(add-page)
 
 left-arrowright-arrow  
(2px)
 3px
 
 (left-arrow)(right-arrow)  
   
 (sub/add-page)  




   
:horizontal  :vertical
 :left-arrow  :up-arrow
 :right-arrow  :down-arrow  

 

サイズグリップの装飾

画像の変更

サイズグリップを縦横16pxにしてリソース画像を表示します。
※グリップ領域の大きさに合わせて画像が伸縮することはありません。


スライダーの装飾

装飾の基本

 groove()handle
 sub-pageadd-page  

   


ハンドルを上下に飛び出した形にして、左右の領域を紫とオレンジ色にします。
 groove
 
   

   
:horizontal  :vertical
 height  width
 width  height
 top  left
 bottom  right
 margin    

スピンボックスの装飾

装飾の基本

全体の装飾と増減ボタンのスタイルが指定できます。
カーソルが上に乗った時やマウスの左ボタンを押した時などの指定ができます。

スピンボックスのサイズに合わせて背景画像がぴったり表示されるようにします。
 ()()
 15px3px18px  (1)×216px
 border-image使  



 (background)  

ステータスバーの装飾

装飾の基本

 
(1px)
 (3px)  


子要素は3つともラベルなので、両方の境界線が付きます。
この境界線が付くのはステータスバーにあるラベルだけです。

タブウィジェットの装飾

装飾の基本

 
 (tear)  

 
 調  
 paintab-bar
 4  


   
※非選択時の高さ調整はしてないので、選択中も他のタブと同じ高さになります。
※紫色の線と索引部の中央ぞろえ以外は前の例と同じです。

ボタン関連

クローズボタンの付いたタブウィジェットを作り、タブの1つにQPushButtonを置きます。
 setTabsClosable
 2(Page)


 (tear)  



 ××
 ×
 ×
 selected×  

テーブルビューの装飾

装飾の基本

   

 (2px)
1  

上がデフォルトの単一セル選択と全選択です。下が設定後です。


ツールバーの装飾

装飾の基本

全体の背景色やハンドルのスタイルが指定できます。

背景色を水色にして、ハンドルに赤い線の画像を指定します。


ツールボックスの装飾

装飾の基本

   
3  

上がデフォルトのツールボックスです。下が設定後です。


ツールボックスの背景色を白にして、タブはグラデーションにします。
開いているタブはイタリック体の黒文字にして、閉じているタブは白文字にします。

ツールボタンの装飾

装飾の基本

 
   
 


 
 4  


 MenuButtonPopup
 InstantPopup
 menu-buttonmenu-arrowMenuButtonPopup
 20px  (2)×24px16px
 1px  
■ポップアップモード定義[enum QToolButton::ToolButtonPopupMode]
定義説明
DelayedPopup0 マウスの左ボタンを押し続けた時にメニューを表示
MenuButtonPopup1 ツールボタンの右にメニュー表示用の矢印ボタンを表示
InstantPopup2 ツールボタン全体がメニュー表示機能(connect不可)

ツールチップの装飾

装飾の基本

全体の背景色や境界線と透明度が指定できます。

境界線(2px・実線・濃黄色)を指定し、背景は半透明にします。
※高さの指定が効かないので、max-heightで代用しています。

opacityを100にするともっと透明になり、255にすると透明ではなくなります。


■ボタンスタイル定義[enum Qt::ToolButtonStyle]
定義説明
ToolButtonIconOnly0アイコンのみ
ToolButtonTextOnly1テキストのみ
ToolButtonTextBesideIcon2アイコンの横にテキスト
ToolButtonTextUnderIcon3アイコンの下にテキスト
ToolButtonFollowStyle4スタイルに従う

ツリービューの装飾

装飾の基本

全体の背景色や境界線とアイテムのスタイルが指定できます。

行の背景色と、マウスの左ボタンを押した時・フォーカス有無・ホバーの状態ごとに 背景色や境界線を設定します。

 



 
 
   

マークを色で表す

プラス/マイナスや罫線の代わりに色で表します。
 has-children  has-siblings
 adjoins-item    

マークを画像で表す

プラス/マイナスや罫線の代わりに画像を表示します。
 (closed)(open)
   

ドックウィジェットの装飾

装飾の基本

タイトルバーとボタンのスタイルが指定できます。
ドッキングした時の隣接する部分は、メインウインドウのセパレーターで指定します。

テスト用のドックウィジェットを作ってリストをセットします。

一番左がデフォルトのドックウィジェットです。
ウインドウの右端にドッキングした状態になります。

タイトルバーのボタンの画像と動作別スタイルを変更します。
※マウスの左ボタンを押すと画像が少し右下に移動し、離すと元の位置に戻ります。

ボタンを左側に表示し、隣接部分を10pxの黄色にします。
※カーソルが黄色い部分に入ると赤に変わります。

その他

プロパティを使う

必須項目のQLineEditの背景色を黄色にします。
QLineEditを作る時、mandatoryFieldプロパティをセットし、後でそれを使います。
※3つのQLineEditのうち、プロパティにtrueをセットしたedit2だけ背景色が黄色になります。
※プロパティの名前(mandatoryField)は任意の文字列を指定できます。
※setProperty関数はQObjectクラスで、第2引数はQVariantです。

リードオンリー

リードオンリーのQLineEditの背景色を青色にします。

スプリッター

水平・垂直の線の太さは変化しますが、画像に変化はありません。
※"image:"をpressedに入れなくてもいいのでしょうか。入れても結果は変わりませんが。

プッシュボタンと画像

ボタンを横に広げた時の比較です。

     

※borderのtransparentを入れると、より自然な感じになるということでしょうか。

2016年12月