📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 261行目: | 261行目: | ||
return app.exec(); | return app.exec(); | ||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== ウィンドウの背景を画像にする ==== | |||
<code>QStyle</code>クラスは、ウィンドウの外見を詳細に設定することができる。<br> | |||
<br> | |||
<code>QStyle</code>クラスを継承した派生クラスを作成して、必要な項目のうち、比較的簡単に設定できる項目である。<br> | |||
<code>QStyle</code>クラスを継承した派生クラスは数種類用意されており、OSにより使用できるものが決まっている。<br> | |||
<br> | |||
以下の例は、Qtに付属しているサンプルを参考にしている。(<Qtのインストールディレクトリ>/examples/widgets/stylesheetディレクトリ)<br> | |||
ここでは、examples/widgets/stylesディレクトリに合わせて、<code>QMotifStyle</code>クラスを継承した派生クラスを作成している。<br> | |||
<br> | |||
設定後、<code>QMainWindow</code>クラスまたは<code>QDialog</code>クラスのコンストラクタにおいて、以下のように記述して適用する。<br> | |||
<syntaxhighlight lang="c++"> | |||
QApplication::setStyle(new MyStyle); // MyStyleクラスは、QMotifStyleクラスの派生クラス | |||
</syntaxhighlight> | |||
<br> | |||
ウィンドウの背景を画像にするには、まず、<code>polish</code>メソッドをオーバーライドする。<br> | |||
次に、画像を設定するためのsetTextureメソッド(メソッド名は任意)を作成する。<br> | |||
<syntaxhighlight lang="c++"> | |||
#pragma once | |||
#include <QtGui/QMotifStyle> | |||
class MyStyle : public QMotifStyle | |||
{ | |||
public: | |||
MyStyle(); | |||
~MyStyle(); | |||
void polish(QPalette &palette); | |||
private: | |||
static void setTexture(QPalette &palette, QPalette::ColorRole role, const QPixmap &pixmap); | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<code>polish</code>メソッドとsetTextureメソッドは、以下のように記述する。<br> | |||
背景画像は、型抜き画像としても使用することができる。したがって、背景用画像と型抜き用画像の2つを用意する必要はない。<br> | |||
<syntaxhighlight lang="c++"> | |||
void MyStyle::polish(QPalette &palette) | |||
{ | |||
QPixmap backgroundImage("window.png"); | |||
setTexture(palette, QPalette::Window, backgroundImage); | |||
} | |||
void MyStyle::setTexture(QPalette &palette, QPalette::ColorRole role, const QPixmap &pixmap) | |||
{ | |||
for(int i = 0; i < QPalette::NColorGroups; ++i) | |||
{ | |||
QColor color = palette.brush(QPalette::ColorGroup(i), role).color(); | |||
palette.setBrush(QPalette::ColorGroup(i), role, QBrush(color, pixmap)); | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== ボタンのスタイルの変更 ==== | |||
上記のセクションにも記述した<code>polish</code>メソッドを使用して、ボタンのスタイルを変更することができる。<br> | |||
<br> | |||
<code>QPalette</code>クラスのコンストラクタでは、ボタンの色を定義する。<br> | |||
ウィンドウおよびコントロールの設定の詳細は、[http://doc-snapshot.qt-project.org/4.8/qpalette.html Qtの公式WebサイトのQPalleteリファレンス]を参照すること。<br> | |||
<syntaxhighlight lang="c++"> | |||
void MyStyle::polish(QPalette &palette) | |||
{ | |||
QPixmap backgroundImage("window.png"); | |||
// 追加部分 : ボタンスタイルを変更 | |||
palette = QPalette(QColor(0, 0, 0, 50)); | |||
palette.setBrush(QPalette::ButtonText, Qt::cyan); | |||
setTexture(palette, QPalette::Window, backgroundImage); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
また、ボタンの背景を画像に変更するには、以下のように記述する。<br> | |||
<syntaxhighlight lang="c++"> | |||
void MyStyle::polish(QPalette &palette) | |||
{ | |||
QPixmap backgroundImage("window.png"); | |||
// 追加部分 : ボタンの背景を画像にする場合 | |||
QPixmap buttonImage("button.png"); | |||
// 追加部分 : ボタンを押下した時の背景 | |||
QPixmap midImage = buttonImage; | |||
setTexture(palette, QPalette::Button, buttonImage); | |||
setTexture(palette, QPalette::Mid, midImage); | |||
setTexture(palette, QPalette::Window, backgroundImage); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||