📢 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>