Qtプログラミング入門: QColor::setAlphaF()で色に透明度を設定する方法

2025-05-26

QColor::setAlphaF() とは

QColor::setAlphaF() は、Qt の QColor クラスのメンバ関数で、色の**アルファ値(透明度)**を設定するために使用されます。

アルファ値は、色がどれだけ不透明であるか(または透明であるか)を示す値です。

  • 0 (または 255): 完全に不透明(背景が全く見えない)
  • 0 (または 0): 完全に透明(背景が完全に透けて見える)

setAlphaF() の末尾にある F は "Floating Point"(浮動小数点)を意味し、引数として qreal 型(通常は double と同等)の浮動小数点数を受け取ります。この点が、整数値(0~255)でアルファ値を設定する setAlpha() 関数との違いです。

使用方法

QColor::setAlphaF() は、0.0から1.0までの範囲の浮動小数点数を引数として受け取ります。


#include <QColor>
#include <QDebug> // デバッグ出力用

int main() {
    // まず、基本的な色を定義します(例: 赤)
    QColor redColor(255, 0, 0); // 赤色 (不透明)

    qDebug() << "元のアルファ値 (整数):" << redColor.alpha();   // 255
    qDebug() << "元のアルファ値 (浮動小数点):" << redColor.alphaF(); // 1.0

    // アルファ値を0.5(半透明)に設定します
    redColor.setAlphaF(0.5);

    qDebug() << "設定後のアルファ値 (整数):" << redColor.alpha();   // 約127
    qDebug() << "設定後のアルファ値 (浮動小数点):" << redColor.alphaF(); // 0.5

    // アルファ値を0.0(完全に透明)に設定します
    redColor.setAlphaF(0.0);
    qDebug() << "完全に透明にした後のアルファ値 (浮動小数点):" << redColor.alphaF(); // 0.0

    // アルファ値を1.0(完全に不透明)に設定します
    redColor.setAlphaF(1.0);
    qDebug() << "完全に不透明にした後のアルファ値 (浮動小数点):" << redColor.alphaF(); // 1.0

    return 0;
}

このコードを実行すると、次のような出力が得られるでしょう。

元のアルファ値 (整数): 255
元のアルファ値 (浮動小数点): 1
設定後のアルファ値 (整数): 127 // 255 * 0.5 = 127.5 の四捨五入
設定後のアルファ値 (浮動小数点): 0.5
完全に透明にした後のアルファ値 (浮動小数点): 0
完全に不透明にした後のアルファ値 (浮動小数点): 1
  • 他のグラフィックAPIとの親和性
    OpenGLなど、多くのグラフィックAPIではアルファ値を0.0~1.0の浮動小数点数で扱います。そのため、これらのAPIと連携する際にQtのQColorを使用する場合、setAlphaF()が自然な選択となります。
  • より細かい制御
    256段階の整数値(0-255)に比べて、浮動小数点数を使用することで、より細かい透明度の調整が可能になります。特に、アニメーションやグラデーションなどでスムーズな透明度の変化を実現したい場合に便利です。
  • 直感的な透明度の表現
    0.0から1.0までの範囲は、割合として透明度を表現するのに直感的で分かりやすいです。


アルファ値の範囲外の指定

問題
setAlphaF() は0.0から1.0の範囲の浮動小数点数を受け取ります。この範囲外の値を指定した場合、Qtは内部的に値をクランプ(制限)するため、コンパイルエラーにはなりませんが、意図しない結果になることがあります。


QColor color(255, 0, 0); // 赤
color.setAlphaF(1.5);    // 1.0にクランプされる
color.setAlphaF(-0.2);   // 0.0にクランプされる

トラブルシューティング

  • デバッグ出力 (qDebug() << color.alphaF();) を使って、実際に設定されたアルファ値を確認することをお勧めします。
  • 意図した透明度が得られない場合は、setAlphaF() に渡している値が0.0から1.0の範囲内であることを確認してください。

透明度が適用されない、または期待通りに表示されない

問題
setAlphaF() でアルファ値を設定したにもかかわらず、UI要素が透明にならなかったり、背景が透けて見えなかったりする場合があります。

考えられる原因とトラブルシューティング

  • QPainterの設定

    • 原因
      QPainter で描画を行う際に、QPainter::setOpacity() など、グローバルな不透明度設定が適用されている場合があります。
    • トラブルシューティング
      • QPainter::opacity() がデフォルトの1.0(完全に不透明)になっていることを確認してください。もし変更している場合は、QPainter::setOpacity(1.0) に戻すか、意図した値になっているか確認してください。
  • グラフィックシステム/バックエンドの制約

    • 原因
      まれに、使用しているQtのバージョンやグラフィックドライバー、プラットフォームの制約により、特定の透明度表現が完全にサポートされない場合があります。
    • トラブルシューティング
      • 他の簡単な透明度の例(例: QColor(0, 0, 0, 128))を試して、基本的な透明度機能が動作するか確認します。
      • Qtのバージョンを更新したり、グラフィックドライバーを最新のものにしたりすることを検討してください。
  • 描画順序 (Z-order)

    • 原因
      透明な要素が不透明な要素の上に描画されていない場合、下の要素が透けて見えません。
    • トラブルシューティング
      • QGraphicsView シーンでは、アイテムの Z 値 (QGraphicsItem::setZValue()) が描画順序を決定します。透明にしたいアイテムの Z 値を、その下にあるアイテムよりも高く設定する必要があります。
      • 通常の QWidget では、子のウィジェットが親の上に描画されます。ウィジェットの階層構造と描画順序を考慮してください。
    • 原因
      QWidget やその派生クラスでは、背景の描画方法がデフォルトで不透明に設定されている場合があります。特に QWidget::setAutoFillBackground(true) を使用している場合や、スタイルシート (background-color など) で背景が設定されている場合、透明度が無視されることがあります。
    • トラブルシューティング
      • QWidget::setAttribute(Qt::WA_TranslucentBackground) を設定してみてください。これにより、ウィジェットが半透明の背景を持つことをQtに伝えます。
      • QWidget::setStyleSheet() で背景色を設定している場合、background-color: rgba(255, 0, 0, 128); のようにアルファ値を明示的に指定する必要があります。
      • カスタムペイントイベント (paintEvent()) で背景を描画している場合は、QPainter::fillRect() などで QColor を使用して、アルファ値が正しく適用されているか確認してください。

視覚的な期待とのギャップ

問題
setAlphaF(0.5) と設定しても、見た目が「半透明」に感じられない、または期待したほど透明でないと感じることがあります。

考えられる原因とトラブルシューティング

  • モニターのキャリブレーションや環境光
    実際の画面の表示は、モニターのキャリブレーションや周囲の環境光によって異なる場合があります。
    • トラブルシューティング
      異なるデバイスや環境で表示を確認してみるのも有効です。
  • 背景色との組み合わせ
    アルファ値は、その色が描画される背景色と組み合わされて初めて視覚的な透明度を形成します。例えば、白い背景にsetAlphaF(0.5)の黒い円を描画すると、灰色に見えます。これが期待通りの動作です。
    • トラブルシューティング
      透明度を評価する際は、その要素が描画される実際の背景を考慮してください。異なる背景色の上に配置してみて、視覚的な効果を確認します。

QColor オブジェクトのコピーと生存期間

問題
QColor オブジェクトをコピーしたり、関数間で渡したりする際に、アルファ値の変更が期待通りに反映されないことがあります。


void setColorTransparent(QColor color) { // QColor が値渡しされている
    color.setAlphaF(0.5);
}

// ... main関数などで
QColor myColor(255, 0, 0);
setColorTransparent(myColor); // myColor は変更されない
qDebug() << myColor.alphaF(); // 1.0のまま

トラブルシューティング

  • QColor は軽量なクラスであるため、値渡しされることも多いですが、変更を意図する場合はこの点に注意が必要です。
  • 関数に QColor を渡す際は、参照 (QColor& または const QColor&) を使用して、元のオブジェクトが変更されるようにするか、変更された QColor オブジェクトを関数から返すようにしてください。
    // 参照渡し
    void setColorTransparent(QColor& color) {
        color.setAlphaF(0.5);
    }
    
    // または、変更された QColor を返す
    QColor createTransparentColor(QColor originalColor) {
        originalColor.setAlphaF(0.5);
        return originalColor;
    }
    

QColor::setAlphaF() 自体は、指定されたアルファ値を正確に設定する堅牢な関数です。関連する問題のほとんどは、透明度設定がどのように描画システムやUI要素のプロパティと相互作用するか、または値の受け渡し方法に関する誤解に起因します。



QColor オブジェクトの基本的なアルファ値設定

最も基本的な使用法です。色を作成し、その透明度を浮動小数点数で設定します。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QColor>
#include <QDebug> // デバッグ出力用

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        setWindowTitle("QColor::setAlphaF() Example 1");
        resize(300, 200);

        // 背景を半透明にするための設定
        // Qt::WA_TranslucentBackground を設定することで、ウィジェットの背景が透過します。
        // これがないと、親ウィジェットの背景が描画されず、透明効果が見えにくい場合があります。
        setAttribute(Qt::WA_TranslucentBackground);
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing); // アンチエイリアスを有効にして滑らかに描画

        // ウィジェットの背景を描画 (これ自体も透明度を持つ可能性がある)
        // ここでは、デフォルトの背景色に半透明効果を適用
        QColor backgroundColor = palette().window().color();
        backgroundColor.setAlphaF(0.7); // 背景をやや半透明に
        painter.fillRect(rect(), backgroundColor);

        // 赤色を作成し、アルファ値を0.5(半透明)に設定
        QColor semiTransparentRed(255, 0, 0); // 初期は不透明な赤
        semiTransparentRed.setAlphaF(0.5);   // 半透明の赤に設定

        // 円を半透明の赤で描画
        painter.setBrush(semiTransparentRed);
        painter.setPen(Qt::NoPen); // 境界線なし
        painter.drawEllipse(50, 50, 100, 100);

        // 青色を作成し、アルファ値を0.2(ほぼ透明)に設定
        QColor almostTransparentBlue(0, 0, 255); // 初期は不透明な青
        almostTransparentBlue.setAlphaF(0.2);    // ほぼ透明な青に設定

        // もう一つの円をほぼ透明な青で描画
        painter.setBrush(almostTransparentBlue);
        painter.drawEllipse(100, 80, 100, 100);

        // 緑色を作成し、アルファ値を1.0(完全に不透明)に設定
        QColor opaqueGreen(0, 255, 0); // 初期は不透明な緑
        opaqueGreen.setAlphaF(1.0);    // 完全に不透明な緑に設定(明示的に)

        // 四角形を不透明な緑で描画
        painter.setBrush(opaqueGreen);
        painter.drawRect(20, 120, 80, 50);

        // 各色のアルファ値をデバッグ出力
        qDebug() << "Semi-transparent Red AlphaF:" << semiTransparentRed.alphaF();
        qDebug() << "Almost Transparent Blue AlphaF:" << almostTransparentBlue.alphaF();
        qDebug() << "Opaque Green AlphaF:" << opaqueGreen.alphaF();
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

解説

  • Qt::WA_TranslucentBackground は、ウィジェット自体の背景を半透明にすることで、下の要素が透けて見えるようにするために重要です。これにより、OSのデスクトップなどがウィジェットを通して見えるようになります。
  • QColor オブジェクトを初期化し、setAlphaF() を使って透明度を設定します。
  • MyWidget クラスを定義し、その paintEvent で図形を描画します。

アニメーションで透明度を変化させる

QPropertyAnimationQColor を組み合わせて、時間の経過とともにオブジェクトの透明度を滑らかに変化させる例です。

#include <QApplication>
#include <QPushButton>
#include <QPropertyAnimation>
#include <QColor>
#include <QDebug>
#include <QPainter>

class AnimatedButton : public QPushButton
{
    Q_OBJECT // Q_OBJECT マクロが必要 (プロパティアニメーションのため)

    // QColor は Q_PROPERTY の直接の型としては使えないため、
    // QVariantAnimation またはカスタムプロパティを検討します。
    // この例では、QColor を動的に変更し、update() を呼び出します。

public:
    AnimatedButton(const QString &text, QWidget *parent = nullptr)
        : QPushButton(text, parent),
          m_color(255, 0, 0, 255) // 初期は不透明な赤
    {
        // QPushButton の背景を透明にするためのスタイルシート
        // これにより、QPainter で描画するカスタム背景が見えるようになります。
        setStyleSheet("QPushButton { background: transparent; border: 2px solid grey; border-radius: 10px; }");

        // 半透明の背景を持つことをQtに伝えます
        setAttribute(Qt::WA_TranslucentBackground);

        // アニメーションの設定
        QPropertyAnimation *animation = new QPropertyAnimation(this, "customOpacity");
        animation->setDuration(2000); // 2秒
        animation->setLoopCount(-1);   // 無限ループ
        animation->setKeyValueAt(0, 1.0);  // 最初は不透明
        animation->setKeyValueAt(0.5, 0.2); // 中間点でほぼ透明
        animation->setKeyValueAt(1, 1.0);  // 最後は再び不透明

        connect(animation, &QPropertyAnimation::valueChanged, this, [this](const QVariant &value) {
            // アニメーションの値が変化したときにアルファ値を更新
            m_color.setAlphaF(value.toReal());
            update(); // 再描画を要求
        });

        animation->start();
    }

    // カスタムプロパティのためのゲッターとセッター
    qreal customOpacity() const { return m_color.alphaF(); }
    void setCustomOpacity(qreal opacity) {
        m_color.setAlphaF(opacity);
        update(); // 更新を強制
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        // 現在のアルファ値を持つ色で背景を描画
        painter.setBrush(m_color);
        painter.setPen(Qt::NoPen);
        painter.drawRoundedRect(rect(), 10, 10); // 角丸の矩形を描画

        // QPushButton のテキストを描画
        QPushButton::paintEvent(event);
    }

private:
    QColor m_color;

    // Q_PROPERTY のためのメンバ変数を定義
    Q_PROPERTY(qreal customOpacity READ customOpacity WRITE setCustomOpacity)
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    AnimatedButton button("Hello, Transparent Button!");
    button.resize(200, 100);
    button.show();

    return app.exec();
}

#include "main.moc" // mocファイルをインクルード (Q_OBJECTのため)

解説

  • スタイルシートでボタンのデフォルトの背景を transparent に設定している点も重要です。
  • update() を呼び出すことで、ウィジェットが再描画され、透明度の変化が視覚的に反映されます。
  • アニメーションの値 (qreal) を取得し、それを使って m_color.setAlphaF() でボタンの背景色のアルファ値を更新します。
  • Q_PROPERTY を使用して customOpacity というプロパティを定義し、QPropertyAnimation でこのプロパティをアニメーションさせます。
  • AnimatedButton クラスは QPushButton を継承し、カスタムの paintEvent をオーバーライドして背景を描画します。

QGraphicsViewQGraphicsScene を使用して、シーン内のアイテムの透明度を制御する例です。

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QSlider>
#include <QVBoxLayout>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget *window = new QWidget;
    window->setWindowTitle("QColor::setAlphaF() in QGraphicsView");

    QGraphicsScene *scene = new QGraphicsScene(0, 0, 400, 300);
    scene->setBackgroundBrush(Qt::lightGray); // シーンの背景色

    QGraphicsView *view = new QGraphicsView(scene);
    view->setRenderHint(QPainter::Antialiasing); // アンチエイリアスを有効に

    // 透明度を調整する長方形アイテム
    QGraphicsRectItem *rectItem = new QGraphicsRectItem(50, 50, 100, 100);
    QColor rectColor(255, 0, 0); // 赤色
    rectColor.setAlphaF(0.8);    // 初期アルファ値
    rectItem->setBrush(rectColor);
    rectItem->setPen(QPen(Qt::black, 2));
    scene->addItem(rectItem);

    // その下に配置する別のアイテム(透明度を確認するため)
    QGraphicsRectItem *behindItem = new QGraphicsRectItem(100, 100, 120, 120);
    behindItem->setBrush(Qt::blue);
    behindItem->setPen(QPen(Qt::darkBlue, 2));
    behindItem->setZValue(-1); // rectItem の下に描画されるようにZ値を低く設定
    scene->addItem(behindItem);

    // スライダーで長方形の透明度を制御
    QSlider *alphaSlider = new QSlider(Qt::Horizontal);
    alphaSlider->setRange(0, 100); // 0%から100%
    alphaSlider->setValue(static_cast<int>(rectColor.alphaF() * 100)); // 初期値

    QLabel *alphaLabel = new QLabel("Alpha: 80%");

    QObject::connect(alphaSlider, &QSlider::valueChanged, [&](int value) {
        qreal alphaF = static_cast<qreal>(value) / 100.0;
        QColor currentColor = rectItem->brush().color();
        currentColor.setAlphaF(alphaF); // アイテムのブラシのアルファ値を変更
        rectItem->setBrush(currentColor); // 新しいブラシをセット
        alphaLabel->setText(QString("Alpha: %1%").arg(value));
    });

    QVBoxLayout *layout = new QVBoxLayout(window);
    layout->addWidget(view);
    layout->addWidget(alphaLabel);
    layout->addWidget(alphaSlider);

    window->resize(500, 450);
    window->show();

    return app.exec();
}
  • setZValue() を使ってアイテムの描画順序を制御し、透明度による重なり効果が分かりやすいようにしています。
  • スライダー (QSlider) を追加し、その値の変化に応じて QGraphicsRectItem のアルファ値を動的に変更します。
  • QGraphicsRectItem を作成し、そのブラシの QColorsetAlphaF() を適用します。
  • QGraphicsSceneQGraphicsView を設定します。


QColor コンストラクタでのアルファ値の指定

QColor オブジェクトを初期化する際に、R, G, B 値と一緒にアルファ値を直接指定するコンストラクタが用意されています。

整数値 (0-255) で指定する場合
QColor::QColor(int r, int g, int b, int a = 255)

// 赤色で半透明 (アルファ値127)
QColor semiTransparentRed(255, 0, 0, 127);
qDebug() << semiTransparentRed.alphaF(); // 約 0.498 (127/255)

浮動小数点数 (0.0-1.0) で指定する場合
QColor::QColor(qreal r, qreal g, qreal b, qreal a = 1.0) これは QColor::fromRgbF() のコンストラクタバージョンです。

// 緑色で半透明 (アルファ値0.5)
QColor semiTransparentGreen(0.0, 1.0, 0.0, 0.5);
qDebug() << semiTransparentGreen.alphaF(); // 0.5

QColor::setAlpha() メソッド

setAlphaF() と同様に、既存の QColor オブジェクトのアルファ値を設定するメソッドですが、こちらは整数値(0~255)で指定します。

void QColor::setAlpha(int alpha)

QColor blue(0, 0, 255); // 不透明な青
blue.setAlpha(64);      // 約 25% の不透明度 (64/255)
qDebug() << blue.alphaF(); // 約 0.25

静的ファクトリ関数

QColor クラスは、異なる色空間や値の形式から QColor オブジェクトを作成するための便利な静的ファクトリ関数を多数提供しています。これらの関数の中には、アルファ値を引数として受け取るものがあります。

  • QColor QColor::fromHsv(int h, int s, int v, int a = 255) / QColor::fromHsvF(qreal h, qreal s, qreal v, qreal a = 1.0) など HSV (Hue, Saturation, Value) や HSL (Hue, Saturation, Lightness)、CMYK など、他の色モデルにもアルファ値を指定できる同様のファクトリ関数が存在します。

    // HSVで半透明のシアン
    QColor transparentCyan = QColor::fromHsvF(0.5, 1.0, 1.0, 0.6); // Hue 0.5 = シアン
    qDebug() << transparentCyan.alphaF(); // 0.6
    
  • QColor QColor::fromRgba(QRgb rgba) QRgb 型(符号なし32ビット整数でAARRGGBB形式)から色を作成します。QRgbqRgba() 関数などで生成できます。

    QRgb myRgbaValue = qRgba(0, 255, 0, 64); // 半透明の緑
    QColor anotherGreen = QColor::fromRgba(myRgbaValue);
    qDebug() << anotherGreen.alphaF(); // 約 0.25 (64/255)
    
  • QColor QColor::fromRgbF(qreal r, qreal g, qreal b, qreal a = 1.0) 浮動小数点数 (0.0-1.0) のRGBとアルファ値から色を作成します。setAlphaF() のアルファ値を直接指定するコンストラクタ版のようなものです。

    QColor yellow = QColor::fromRgbF(1.0, 1.0, 0.0, 0.3); // 薄い半透明の黄色
    qDebug() << yellow.alphaF(); // 0.3
    
  • QColor QColor::fromRgb(int r, int g, int b, int a = 255) 8ビット整数値 (0-255) のRGBとアルファ値から色を作成します。

    QColor purple = QColor::fromRgb(128, 0, 128, 192); // 半不透明な紫 (192/255)
    qDebug() << purple.alphaF(); // 約 0.75
    

スタイルシート (QSS) での透明度指定

Qt のスタイルシート (QSS) を使用してウィジェットの背景色などを設定する場合、CSS の rgba() 関数でアルファ値を指定できます。

// ウィジェットの背景を半透明の赤に設定
myWidget->setStyleSheet("background-color: rgba(255, 0, 0, 128);");

// テキストの色を半透明の青に設定
myLabel->setStyleSheet("color: rgba(0, 0, 255, 64);");

利点

  • XMLやJSONなどの外部設定ファイルから簡単にテーマを変更できる。
  • デザインとロジックの分離。

注意点

  • すべてのウィジェットやプロパティが透明度を持つわけではありません。特に、ネイティブなウィジェットの描画はOSに依存するため、常に期待通りに透明にならない場合があります。多くの場合、setAttribute(Qt::WA_TranslucentBackground) が必要になります。

QPainter::setOpacity()

QPainter クラスには、描画操作全体の不透明度を設定する setOpacity() メソッドがあります。これは、描画するすべての要素に影響します。

void QPainter::setOpacity(qreal opacity)

void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    // 背景に不透明な画像を事前に描画
    painter.drawPixmap(0, 0, someOpaquePixmap);

    painter.setOpacity(0.5); // これ以降の描画はすべて半透明になる

    // この赤い円は半透明に描画される
    painter.setBrush(Qt::red);
    painter.drawEllipse(50, 50, 100, 100);

    // この青い四角形も半透明に描画される
    painter.setBrush(Qt::blue);
    painter.drawRect(80, 80, 120, 120);

    painter.setOpacity(1.0); // 不透明度を元に戻す

    // このテキストは不透明に描画される
    painter.drawText(10, 10, "Normal Text");
}

利点

  • 一時的に特定の描画の不透明度を変更したい場合に役立ちます。
  • 複数の描画要素に一括で透明度を適用したい場合に便利です。

注意点

  • QColor のアルファ値と QPainter::opacity()乗算されます。例えば、QColor がアルファ値 0.5 を持ち、QPainter::opacity() が 0.5 に設定されている場合、最終的な描画は 0.5 * 0.5 = 0.25 の不透明度になります。

ウィジェット全体やグラフィックスアイテム全体に透明度(不透明度)を適用したい場合は、QGraphicsOpacityEffect を使用できます。これは、ウィジェットのレンダリング後に適用される視覚効果です。

#include <QApplication>
#include <QPushButton>
#include <QGraphicsOpacityEffect>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget *window = new QWidget;
    QVBoxLayout *layout = new QVBoxLayout(window);

    QPushButton *button1 = new QPushButton("Normal Button");
    QPushButton *button2 = new QPushButton("Semi-Transparent Button");

    // QGraphicsOpacityEffect を作成し、不透明度を設定
    QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect(button2);
    opacityEffect->setOpacity(0.6); // 60% の不透明度

    // ウィジェットにエフェクトを適用
    button2->setGraphicsEffect(opacityEffect);

    layout->addWidget(button1);
    layout->addWidget(button2);
    window->setLayout(layout);

    window->resize(300, 200);
    window->show();

    return app.exec();
}

利点

  • アニメーションと組み合わせることで、フェードイン/アウト効果を簡単に実現できます。
  • ウィジェットのコードを修正することなく、動的に透明度を変更できます。
  • ウィジェットの内容全体(テキスト、アイコン、背景など)に均一に透明度を適用できます。

注意点

  • 透明度が必要ない場合は、setGraphicsEffect(nullptr) でエフェクトを無効にできます。
  • オーバーヘッドが発生する可能性があります。特に多数の要素に適用する場合や、複雑な描画が行われる場合はパフォーマンスに影響を与える可能性があります。