QRadialGradient::setCenterRadius()メソッドの使い道


QRadialGradient::setCenterRadius()メソッドは、Qt GUIライブラリで放射状グラデーションを作成する際に、グラデーションの中心点からの半径を設定するために使用されます。このメソッドは、グラデーションの効果範囲を制御し、視覚的な表現を調整するのに役立ちます。

構文

void QRadialGradient::setCenterRadius(qreal radius);

パラメータ

  • radius: グラデーションの中心点からの半径を表す実数値。

戻り値

なし

詳細

QRadialGradientクラスは、円形または楕円形の放射状グラデーションを定義するために使用されます。setCenterRadius()メソッドは、このグラデーションの中心点からの半径を設定することで、グラデーションの効果範囲を制御します。半径の値が大きくなるほど、グラデーションは広範囲に広がり、逆に小さくなるほど効果範囲は狭くなります。

QRadialGradient gradient(QPointF(50, 50), 25);
gradient.setColorAt(0, Qt::red);
gradient.setColorAt(1, Qt::white);

QPainter painter(widget);
painter.setBrush(gradient);
painter.drawRect(0, 0, 100, 100);

この例では、赤色から白色への放射状グラデーションを作成し、それを矩形に描画しています。setCenterRadius()メソッドによって、グラデーションの中心点は(50, 50)に設定され、半径は25ピクセルに設定されています。

  • グラデーションの効果範囲をさらに制御するには、setStartAngle()、setEndAngle()、setSpread()などのメソッドを使用できます。
  • グラデーションの中心点は、setCenter()メソッドを使用して設定することもできます。
  • setCenterRadius()メソッドは、グラデーションを作成する前に呼び出す必要があります。


#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QRadialGradient>

class MyWidget : public QWidget
{
public:
    MyWidget() : QWidget()
    {
        // グラデーションを作成
        QRadialGradient gradient(QPointF(50, 50), 25);
        gradient.setColorAt(0, Qt::red);
        gradient.setColorAt(1, Qt::white);

        // ウィジェットのサイズを設定
        setMinimumSize(150, 150);
    }

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

        // グラデーションをブラシとして設定
        painter.setBrush(gradient);

        // 矩形を描画
        painter.drawRect(0, 0, 100, 100);
    }
};

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

    MyWidget widget;
    widget.show();

    return app.exec();
}

例2:楕円形グラデーション

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QRadialGradient>

class MyWidget : public QWidget
{
public:
    MyWidget() : QWidget()
    {
        // グラデーションを作成
        QRadialGradient gradient(QPointF(50, 50), 25, 40);
        gradient.setColorAt(0, Qt::red);
        gradient.setColorAt(1, Qt::white);

        // ウィジェットのサイズを設定
        setMinimumSize(150, 150);
    }

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

        // グラデーションをブラシとして設定
        painter.setBrush(gradient);

        // 楕円形を描画
        painter.drawEllipse(0, 0, 100, 80);
    }
};

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

    MyWidget widget;
    widget.show();

    return app.exec();
}

この例では、赤色から白色への楕円形グラデーションを作成し、それを楕円形に描画しています。setCenterRadius()メソッドによって、グラデーションの中心点は(50, 50)に設定され、横方向の半径は25ピクセル、縦方向の半径は40ピクセルに設定されています。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QRadialGradient>

class MyWidget : public QWidget
{
public:
    MyWidget() : QWidget()
    {
        // グラデーションを作成
        QRadialGradient gradient(QPointF(50, 50), 25);
        gradient.setColorAt(0, Qt::red);
        gradient.setColorAt(1, Qt::white);

        // グラデーションの角度を設定
        gradient.setStartAngle(30);
        gradient.setEndAngle(150);

        // グラデーションの拡散を設定
        gradient.setSpread(QGradient::Spread::PadSpread);

        // ウィジェットのサイズを設定
        setMinimumSize(150, 150);
    }

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

        // グラデーションをブラシとして設定
        painter.setBrush(gradient);

        // 矩形を描画
        painter.drawRect(0, 0, 100, 100);
    }
};

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

    MyWidget widget;
    widget.show();

    return app.exec();
}


コンストラクタを使用する

QRadialGradientクラスのコンストラクタは、グラデーションの中心点と半径を指定するために使用できます。

QRadialGradient gradient(QPointF(50, 50), 25);

この例では、中心点が(50, 50)で、半径が25ピクセルの放射状グラデーションを作成しています。

setCenter()メソッドを使用する

setCenter()メソッドは、グラデーションの中心点を設定するために使用できます。

QRadialGradient gradient;
gradient.setCenter(QPointF(50, 50));
gradient.setRadius(25);

この例では、setCenter()メソッドとsetRadius()メソッドを組み合わせて、中心点が(50, 50)で、半径が25ピクセルの放射状グラデーションを作成しています。

QGradient::operator[]を使用する

QGradientクラスのoperator[]演算子は、グラデーションの色をインデックスで指定するために使用できます。この演算子を使用して、グラデーションの中心点からの距離に基づいて色を設定することもできます。

QRadialGradient gradient;

for (int i = 0; i <= 100; ++i) {
    qreal distance = 25 * (i / 100.0);
    QColor color = QColor::fromHsl(160 - distance * 1.6, 100, 50);
    gradient[i / 100.0] = color;
}

この例では、160度から0度までの色相範囲で、50%の彩度と50%の明度を持つグラデーションを作成しています。グラデーションの色は、中心点からの距離に基づいて変化します。

QPainter::setRadialGradient()を使用する

QPainterクラスのsetRadialGradient()メソッドは、ペイントイベント内で放射状グラデーションを設定するために使用できます。

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

    QRadialGradient gradient(QPointF(50, 50), 25);
    gradient.setColorAt(0, Qt::red);
    gradient.setColorAt(1, Qt::white);

    painter.setRadialGradient(QPointF(50, 50), 25, gradient);
    painter.drawRect(0, 0, 100, 100);
}

この例は、paintEvent()メソッド内でsetRadialGradient()メソッドを使用して、QRadialGradient::setCenterRadius()メソッドと同じ効果を達成しています。