Qtで理想の色を生成!QColor::fromHslF()のエラーと解決策

2025-05-26

QColor QColor::fromHslF() は、QtフレームワークのQColorクラスに存在する静的メソッドです。このメソッドは、HLS (Hue, Saturation, Lightness) モデルとアルファ(不透明度)の浮動小数点値から新しいQColorオブジェクトを生成するために使用されます。

HLS モデルとは?

HLSモデルは、色を表現するための方法の一つで、以下の3つの要素で構成されます。

  • Lightness (輝度/明度): 色の明るさを表します。0.0は黒、1.0は白、0.5が中間の明るさです。
  • Saturation (彩度): 色の鮮やかさを表します。0.0は無彩色(灰色)、1.0は最も鮮やかな色です。
  • Hue (色相): 色の種類を表します。赤、緑、青など、色のスペクトラム上の位置を示します。0.0から1.0の範囲の浮動小数点値で、通常は0.0が赤、0.333が緑、0.667が青に対応し、1.0は再び赤に戻ります(円環状)。

F が付く意味

メソッド名の最後に「F」が付いているのは、引数に浮動小数点数 (float/double) を取ることを示しています。これにより、より細かい色の指定が可能になります。QColorには、0-255の整数値を取るfromHsl()という類似のメソッドもありますが、fromHslF()は0.0-1.0の浮動小数点数を使用します。

メソッドの構文

static QColor QColor::fromHslF(qreal h, qreal s, qreal l, qreal a = 1.0)
  • a (qreal): アルファ値(不透明度)。0.0(完全に透明)から1.0(完全に不透明)の範囲。デフォルト値は1.0です。
  • l (qreal): 輝度/明度 (Lightness)。0.0から1.0の範囲。
  • s (qreal): 彩度 (Saturation)。0.0から1.0の範囲。
  • h (qreal): 色相 (Hue)。0.0から1.0の範囲。

戻り値

指定されたHLSとアルファ値を持つ新しいQColorオブジェクトを返します。

使用例

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

int main() {
    // 明るい赤色をHLSで作成(H=0.0, S=1.0, L=0.5, A=1.0)
    QColor brightRed = QColor::fromHslF(0.0, 1.0, 0.5);
    qDebug() << "明るい赤色のRGB値:" << brightRed.red() << brightRed.green() << brightRed.blue();

    // 落ち着いた青色をHLSで作成(H=0.6, S=0.7, L=0.4, A=0.8 - 半透明)
    QColor calmBlue = QColor::fromHslF(0.6, 0.7, 0.4, 0.8);
    qDebug() << "落ち着いた青色のRGB値:" << calmBlue.red() << calmBlue.green() << calmBlue.blue();
    qDebug() << "落ち着いた青色のアルファ値:" << calmBlue.alpha();

    // 灰色をHLSで作成(Hは無意味, S=0.0, L=0.5, A=1.0)
    QColor gray = QColor::fromHslF(0.0, 0.0, 0.5); // 彩度0なのでHueは何でも良い
    qDebug() << "灰色のRGB値:" << gray.red() << gray.green() << gray.blue();

    return 0;
}

このコードを実行すると、各色がどのようにRGB値に変換されたか、デバッグ出力で確認できます。



QColor::fromHslF()自体は比較的単純な関数ですが、色のモデル変換や浮動小数点数の扱いに起因する問題が発生することがあります。

不適切な引数の範囲

エラーの症状
fromHslF()h, s, l, aの各引数が0.0から1.0の範囲であることを期待します。この範囲外の値を渡した場合、コンパイルエラーにはなりませんが、予期しない色になったり、色が正しく表示されないといった論理エラーが発生します。


// 誤った例:Saturationが1.5(範囲外)
QColor badColor = QColor::fromHslF(0.5, 1.5, 0.5);

// 誤った例:Lightnessが-0.2(範囲外)
QColor anotherBadColor = QColor::fromHslF(0.2, 0.8, -0.2);

トラブルシューティング

  • クランプ処理を行う
    必要であれば、値をqBound()関数やstd::clamp()(C++17以降)を使って明示的に0.0から1.0の範囲にクランプ(制限)します。
    #include <QtGlobal> // qBoundのために必要
    // または #include <algorithm> // std::clampのために必要 (C++17以降)
    
    qreal hue = someCalculatedHue;
    qreal saturation = someCalculatedSaturation;
    qreal lightness = someCalculatedLightness;
    qreal alpha = someCalculatedAlpha;
    
    // 値を0.0から1.0の範囲にクランプ
    hue = qBound(0.0, hue, 1.0);
    saturation = qBound(0.0, saturation, 1.0);
    lightness = qBound(0.0, lightness, 1.0);
    alpha = qBound(0.0, alpha, 1.0);
    
    QColor correctColor = QColor::fromHslF(hue, saturation, lightness, alpha);
    
  • 引数の値を検証する
    fromHslF()を呼び出す前に、渡すH, S, L, Aの値がすべて0.0から1.0の間に収まっていることを確認してください。

無彩色におけるHueの値の解釈

エラーの症状
HLSモデルでは、彩度 (Saturation) が0.0の場合(つまり、灰色、黒、白の場合)、色相 (Hue) の値は意味を持ちません。しかし、fromHslF()s=0.0hに0以外の値を渡してもエラーにはなりません。結果として得られる色は期待通りの無彩色(灰色)になりますが、デバッグ目的などで後からhueF()を取得した場合に混乱を招くことがあります。また、QColor::toHslF()で無彩色をRGBからHLSに変換すると、Hueが-1.0になることがあります。これはQtのドキュメントに記載されている正常な動作です。

トラブルシューティング

  • 条件分岐で対応する
    もしHueの値を常に有効な範囲(例:0.0から1.0)で扱いたい場合は、彩度が0.0のときにHueを特定のデフォルト値(例:0.0)に設定するなどのロジックを追加することを検討してください。
    QColor myColor = QColor::fromHslF(0.5, 0.0, 0.5); // 彩度0で灰色
    
    qreal h, s, l, a;
    myColor.getHslF(&h, &s, &l, &a);
    
    if (s < 0.001) { // ほぼ無彩色の場合
        h = 0.0; // または他のデフォルト値
    }
    qDebug() << "修正されたHue:" << h;
    
  • 無彩色の場合のHueの扱いを理解する
    彩度(S)が0.0のQColorオブジェクトのhueF()が返す値は、-1.0になる可能性があることを認識してください。これはバグではなく、仕様です。

浮動小数点数の精度に関する問題

エラーの症状
qrealは通常doubleに解決されるため、高い精度を持ちますが、浮動小数点数の計算ではわずかな誤差が生じることがあります。非常に厳密な色の比較を行う場合、この誤差が問題になる可能性があります。例えば、fromHslF()で色を作成し、その後toHslF()で値を再取得した際に、元の値とわずかに異なることがあります。

トラブルシューティング

  • 必要に応じて丸める
    表示目的などで正確な整数値が必要な場合は、適切な丸め処理(qRound(), qCeil(), qFloor()など)を行うことを検討してください。
  • 厳密な等価比較を避ける
    浮動小数点数の直接的な==比較は避けるべきです。代わりに、許容誤差(イプシロン)を設けて比較します。
    qreal epsilon = 0.00001; // 許容誤差
    
    QColor color1 = QColor::fromHslF(0.1, 0.2, 0.3);
    QColor color2 = QColor::fromHslF(0.1 + 0.000001, 0.2, 0.3); // わずかに異なるHue
    
    if (qFuzzyCompare(color1.hueF(), color2.hueF(), epsilon) &&
        qFuzzyCompare(color1.saturationF(), color2.saturationF(), epsilon) &&
        qFuzzyCompare(color1.lightnessF(), color2.lightnessF(), epsilon) &&
        qFuzzyCompare(color1.alphaF(), color2.alphaF(), epsilon)) {
        qDebug() << "色はほぼ同じです。";
    }
    

ヘッダーのインクルード忘れ

エラーの症状
QColorクラスを使用する際に必要なヘッダーファイルをインクルードし忘れると、コンパイルエラーが発生します。


// #include <QColor> がない場合
// ...
QColor myColor = QColor::fromHslF(0.5, 1.0, 0.5); // エラー: 'QColor' does not name a type

トラブルシューティング

  • コードの冒頭に#include <QColor>を追加してください。

Qtモジュールの不足

エラーの症状
QtのGUI関連の機能を使用する場合、.proファイル(qmakeを使用している場合)やCMakeLists.txt(CMakeを使用している場合)に適切なモジュールが追加されていないと、リンカーエラーやコンパイルエラーが発生することがあります。QColorは通常guiモジュールに含まれます。

トラブルシューティング

  • CMakeLists.txtファイルの場合
    find_package(Qt6 COMPONENTS Core Gui REQUIRED) # Qt6の場合
    # または find_package(Qt5 COMPONENTS Core Gui REQUIRED) # Qt5の場合
    
    target_link_libraries(your_target_name PRIVATE Qt6::Core Qt6::Gui) # Qt6の場合
    # または target_link_libraries(your_target_name PRIVATE Qt5::Core Qt5::Gui) # Qt5の場合
    
  • .proファイルの場合
    QT += core gui
    

プロジェクトのビルド設定を確認し、guiモジュールが正しく含まれていることを確認してください。



QColor::fromHslF() は、色をHLS (Hue, Saturation, Lightness) モデルとアルファ(不透明度)の浮動小数点値で指定し、QColor オブジェクトを生成するための静的メソッドです。このメソッドは、特に色のグラデーションの生成や、ユーザーからのHLS入力に基づいて色を動的に変更するような場合に非常に便利です。

基本的な色の作成

最も基本的な使用例は、HLSとアルファ値を直接指定して色を作成することです。

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QColor>
#include <QPalette> // QWidgetの背景色を設定するために必要
#include <QDebug>   // デバッグ出力用

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

    QWidget window;
    window.setWindowTitle("QColor::fromHslF() の基本例");

    QVBoxLayout *layout = new QVBoxLayout(&window);

    // 1. 明るい赤色 (Hue: 0.0, Saturation: 1.0, Lightness: 0.5, Alpha: 1.0)
    QColor brightRed = QColor::fromHslF(0.0, 1.0, 0.5);
    QLabel *redLabel = new QLabel("明るい赤色");
    redLabel->setAutoFillBackground(true); // 背景色を塗る設定
    QPalette redPalette = redLabel->palette();
    redPalette.setColor(QPalette::Window, brightRed); // QLabelの背景色を設定
    redLabel->setPalette(redPalette);
    layout->addWidget(redLabel);
    qDebug() << "明るい赤色 (R,G,B):" << brightRed.red() << brightRed.green() << brightRed.blue();

    // 2. 落ち着いた青色 (Hue: 0.6, Saturation: 0.7, Lightness: 0.4, Alpha: 1.0)
    QColor calmBlue = QColor::fromHslF(0.6, 0.7, 0.4);
    QLabel *blueLabel = new QLabel("落ち着いた青色");
    blueLabel->setAutoFillBackground(true);
    QPalette bluePalette = blueLabel->palette();
    bluePalette.setColor(QPalette::Window, calmBlue);
    blueLabel->setPalette(bluePalette);
    layout->addWidget(blueLabel);
    qDebug() << "落ち着いた青色 (R,G,B):" << calmBlue.red() << calmBlue.green() << calmBlue.blue();

    // 3. 半透明の緑色 (Hue: 0.333, Saturation: 1.0, Lightness: 0.5, Alpha: 0.5)
    QColor transparentGreen = QColor::fromHslF(0.333, 1.0, 0.5, 0.5);
    QLabel *greenLabel = new QLabel("半透明の緑色 (背景が透ける)");
    greenLabel->setAutoFillBackground(true);
    QPalette greenPalette = greenLabel->palette();
    greenPalette.setColor(QPalette::Window, transparentGreen);
    greenLabel->setPalette(greenPalette);
    layout->addWidget(greenLabel);
    qDebug() << "半透明の緑色 (R,G,B,A):" << transparentGreen.red() << transparentGreen.green() << transparentGreen.blue() << transparentGreen.alpha();

    // 4. 灰色 (Saturationが0.0の場合、Hueは無関係)
    QColor grayColor = QColor::fromHslF(0.0, 0.0, 0.5); // Hueは0.0でも0.5でも結果は同じ
    QLabel *grayLabel = new QLabel("灰色");
    grayLabel->setAutoFillBackground(true);
    QPalette grayPalette = grayLabel->palette();
    grayPalette.setColor(QPalette::Window, grayColor);
    grayLabel->setPalette(grayPalette);
    layout->addWidget(grayLabel);
    qDebug() << "灰色 (R,G,B):" << grayColor.red() << grayColor.green() << grayColor.blue();

    window.show();
    return app.exec();
}

解説

  • qDebug()で各色のRGB値とアルファ値を確認できます。HLS値からどのようにRGB値に変換されているかがわかります。
  • setAutoFillBackground(true)QPaletteを使用することで、QLabelの背景色を直接設定しています。
  • QLabelの背景色にQColor::fromHslF()で作成した色を設定しています。

色相環(Hue Gradient)の作成

HLSモデルのHue(色相)が0.0から1.0まで変化することで、赤→黄→緑→シアン→青→マゼンタ→赤と色が変化する性質を利用して、色相環のようなグラデーションを作成できます。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QDebug>

class ColorWheelWidget : public QWidget {
    Q_OBJECT // シグナル/スロットを使用する場合に必要

public:
    explicit ColorWheelWidget(QWidget *parent = nullptr) : QWidget(parent) {
        setFixedSize(300, 300); // ウィジェットのサイズを固定
        currentHue = 0.0;
        timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &ColorWheelWidget::animateColor);
        timer->start(50); // 50ミリ秒ごとに色を更新
    }

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

        int radius = qMin(width(), height()) / 2 - 10; // 円の半径
        QPoint center = rect().center();

        for (int i = 0; i < 360; ++i) {
            qreal h = (qreal)i / 360.0; // 0.0から1.0の範囲に変換
            QColor color = QColor::fromHslF(h, 1.0, 0.5); // 彩度:1.0, 明度:0.5で作成

            painter.setPen(Qt::NoPen);
            painter.setBrush(color);

            // 各角度に短い線を描画して色相環を表現
            painter.drawPie(QRect(center.x() - radius, center.y() - radius, radius * 2, radius * 2),
                            i * 16, // 1/16度単位なので360*16
                            16);    // 1度分の弧
        }

        // 中央に現在の色を表示する円を描画
        QColor animatedColor = QColor::fromHslF(currentHue, 1.0, 0.5);
        painter.setBrush(animatedColor);
        painter.drawEllipse(center, radius / 3, radius / 3);

        // 現在のHLS値を表示
        painter.setPen(Qt::black);
        painter.setFont(QFont("Arial", 10));
        painter.drawText(rect(), Qt::AlignCenter,
                         QString("H: %1\nS: %2\nL: %3")
                         .arg(currentHue, 0, 'f', 2)
                         .arg(1.0, 0, 'f', 1)
                         .arg(0.5, 0, 'f', 1));
    }

private slots:
    void animateColor() {
        currentHue += 0.01; // Hueを少しずつ増やす
        if (currentHue > 1.0) {
            currentHue = 0.0; // 1.0を超えたら0.0に戻る
        }
        update(); // 再描画を要求
    }

private:
    qreal currentHue;
    QTimer *timer;
};

// mocファイル生成のために必要
#include "main.moc"

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

    ColorWheelWidget widget;
    widget.setWindowTitle("色相環の例");
    widget.show();

    return app.exec();
}

解説

  • qreal型は、Qtがプラットフォームに依存しない浮動小数点数型(通常はdouble)として定義しているものです。
  • QTimerを使ってanimateColor()スロットを定期的に呼び出し、currentHueの値を変更して中央の円の色をアニメーションさせています。
  • QColor::fromHslF(h, 1.0, 0.5) を使用し、h(Hue)を0.0から1.0まで変化させることで、異なる色を作成しています。SaturationとLightnessは固定しています。
  • ColorWheelWidgetクラスを作成し、paintEventで色相環を描画しています。

グラデーションの作成(線形グラデーション)

QLinearGradientと組み合わせて、HLSベースの色のグラデーションを作成することもできます。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QLinearGradient>
#include <QColor>
#include <QDebug>

class GradientWidget : public QWidget {
public:
    explicit GradientWidget(QWidget *parent = nullptr) : QWidget(parent) {
        setFixedSize(400, 200);
    }

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

        // 左から右への線形グラデーション
        QLinearGradient gradient(0, 0, width(), 0); // x0, y0, x1, y1

        // 色相を変化させるグラデーション (赤 -> 緑 -> 青)
        // Hue: 0.0 (赤) -> 0.333 (緑) -> 0.667 (青)
        // Saturation: 1.0 (鮮やか)
        // Lightness: 0.5 (中間的な明るさ)
        gradient.setColorAt(0.0, QColor::fromHslF(0.0, 1.0, 0.5));   // 赤
        gradient.setColorAt(0.25, QColor::fromHslF(0.166, 1.0, 0.5)); // 黄
        gradient.setColorAt(0.5, QColor::fromHslF(0.333, 1.0, 0.5));  // 緑
        gradient.setColorAt(0.75, QColor::fromHslF(0.5, 1.0, 0.5));   // シアン
        gradient.setColorAt(1.0, QColor::fromHslF(0.667, 1.0, 0.5));  // 青

        painter.setBrush(gradient);
        painter.drawRect(rect());

        // 明度を変化させるグラデーション (黒 -> 中間 -> 白)
        // Saturation: 0.0 (無彩色)
        // Lightness: 0.0 (黒) -> 0.5 (中間) -> 1.0 (白)
        QLinearGradient lightnessGradient(0, height() / 2, width(), height() / 2);
        lightnessGradient.setColorAt(0.0, QColor::fromHslF(0.0, 0.0, 0.0)); // 黒
        lightnessGradient.setColorAt(0.5, QColor::fromHslF(0.0, 0.0, 0.5)); // 灰色
        lightnessGradient.setColorAt(1.0, QColor::fromHslF(0.0, 0.0, 1.0)); // 白
        painter.setBrush(lightnessGradient);
        painter.drawRect(0, height() / 2, width(), height() / 2);
    }
};

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

    GradientWidget widget;
    widget.setWindowTitle("HLSグラデーションの例");
    widget.show();

    return app.exec();
}
  • QColor::fromHslF()を使用して、HLS値を変化させることで、鮮やかな色相のグラデーションと、明るさが変化する無彩色のグラデーションを作成しています。
  • QLinearGradientオブジェクトを作成し、setColorAt()メソッドでグラデーションの各停止点の色を指定しています。


QColor::fromHslF() の代替方法

RGB (Red, Green, Blue) モデルによる色の指定

RGB は最も一般的な色モデルで、赤、緑、青の光の混合によって色を表現します。

  • QColor::QColor(int r, int g, int b, int a = 255) (コンストラクタ)

    • fromRgb() と同様に、R, G, B, アルファ値を直接コンストラクタに渡すことでQColorオブジェクトを作成できます。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor yellowColor(255, 255, 0); // 黄色
        qDebug() << "Yellow (RGB):" << yellowColor.red() << yellowColor.green() << yellowColor.blue();
        return 0;
    }
    
  • QColor::fromRgb(int r, int g, int b, int a = 255)

    • 整数値 (0 から 255) で R, G, B, アルファ値を指定します。
    • 最も一般的な色の指定方法であり、CSS の RGB 値など、0-255 の整数値で色が表現されている場合に直接使えます。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor greenInt = QColor::fromRgb(0, 255, 0); // 純粋な緑
        qDebug() << "Green (RGB):" << greenInt.red() << greenInt.green() << greenInt.blue();
    
        QColor customColor = QColor::fromRgb(128, 64, 192, 100); // カスタムカラー(半透明)
        qDebug() << "Custom Color (RGBA):" << customColor.red() << customColor.green() << customColor.blue() << customColor.alpha();
        return 0;
    }
    
    • 浮動小数点数 (0.0 から 1.0) で R, G, B, アルファ値を指定します。
    • fromHslF() と同様に、より細かい色の調整が必要な場合や、計算によって色を生成する場合に便利です。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor redF = QColor::fromRgbF(1.0, 0.0, 0.0); // 純粋な赤
        qDebug() << "Red (RGB):" << redF.red() << redF.green() << redF.blue();
    
        QColor semiTransparentBlueF = QColor::fromRgbF(0.0, 0.0, 1.0, 0.5); // 半透明の青
        qDebug() << "Semi-transparent Blue (RGBA):" << semiTransparentBlueF.red() << semiTransparentBlueF.green() << semiTransparentBlueBlue().blue() << semiTransparentBlueF.alpha();
        return 0;
    }
    

HSV (Hue, Saturation, Value) モデルによる色の指定

HSV モデルは、HLS と似ていますが、Lightness (輝度/明度) の代わりに Value (明度/彩度) を使用します。Value は色の明るさの知覚により近いとされ、特にピッカーやスライダーでの色選択によく利用されます。

  • QColor::fromHsv(int h, int s, int v, int a = 255)

    • 整数値 (H: 0-359, S/V/A: 0-255) で H, S, V, アルファ値を指定します。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor darkOrange = QColor::fromHsv(30, 255, 150); // 暗いオレンジ
        qDebug() << "Dark Orange (RGB):" << darkOrange.red() << darkOrange.green() << darkOrange.blue();
        return 0;
    }
    
  • QColor::fromHsvF(qreal h, qreal s, qreal v, qreal a = 1.0)

    • 浮動小数点数 (0.0 から 1.0) で H, S, V, アルファ値を指定します。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor vividPurple = QColor::fromHsvF(0.75, 1.0, 1.0); // 鮮やかな紫
        qDebug() << "Vivid Purple (RGB):" << vividPurple.red() << vividPurple.green() << vividPurple.blue();
        return 0;
    }
    

CMYK (Cyan, Magenta, Yellow, Key/Black) モデルによる色の指定

CMYK は印刷で使われる減法混色モデルです。

  • QColor::fromCmyk(int c, int m, int y, int k, int a = 255)

    • 整数値 (0 から 255) で C, M, Y, K, アルファ値を指定します。
  • QColor::fromCmykF(qreal c, qreal m, qreal y, qreal k, qreal a = 1.0)

    • 浮動小数点数 (0.0 から 1.0) で C, M, Y, K, アルファ値を指定します。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor printBlack = QColor::fromCmykF(0.0, 0.0, 0.0, 1.0); // 純粋な黒(CMYK)
        qDebug() << "Print Black (RGB):" << printBlack.red() << printBlack.green() << printBlack.blue();
        return 0;
    }
    

HTML/CSS 色名またはHexコードによる指定

  • QColor::setNamedColor(const QString &name)

    • 既存のQColorオブジェクトの色を名前で設定する場合に使用します。
  • QColor::QColor(const QString &name) (コンストラクタ)

    • "red", "blue", "#RRGGBB", "#AARRGGBB" などの文字列で色を指定できます。非常に便利で、Web色の指定に慣れている場合に直感的です。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor namedColor = QColor("steelblue"); // 組み込みの名前付き色
        qDebug() << "Steelblue (RGB):" << namedColor.red() << namedColor.green() << namedColor.blue();
    
        QColor hexColor = QColor("#FF00FF"); // ヘックスコード (RGB)
        qDebug() << "Hex Color (RGB):" << hexColor.red() << hexColor.green() << hexColor.blue();
    
        QColor hexAlphaColor = QColor("#80FF0000"); // ヘックスコード (ARGB, 半透明赤)
        qDebug() << "Hex Alpha Color (RGBA):" << hexAlphaColor.red() << hexAlphaColor.green() << hexAlphaColor.blue() << hexAlphaColor.alpha();
        return 0;
    }
    

Qt::GlobalColor 列挙型による指定

Qt はよく使われる色をQt::GlobalColor列挙型で定義しており、これらを直接使用することもできます。

  • QColor::QColor(Qt::GlobalColor color) (コンストラクタ)
    #include <QColor>
    #include <QDebug>
    #include <QtGlobal> // Qt::GlobalColor のために必要
    
    int main() {
        QColor predefinedBlue = Qt::blue; // Qt::GlobalColor を直接使用
        qDebug() << "Predefined Blue (RGB):" << predefinedBlue.red() << predefinedBlue.green() << predefinedBlue.blue();
    
        QColor transparentColor = Qt::transparent; // 透明色
        qDebug() << "Transparent (RGBA):" << transparentColor.red() << transparentColor.green() << transparentColor.blue() << transparentColor.alpha();
        return 0;
    }
    
  • Qt::GlobalColor
    • 一般的な基本色を素早く指定したい場合に最も簡単です。
  • HTML/CSS 色名 / Hexコード
    • Web開発の経験がある場合や、Web標準の色を使用したい場合に非常に便利です。
    • リソースファイルや設定ファイルから色を読み込む際に柔軟性があります。
  • CMYK (fromCmykF / fromCmyk)
    • 主に印刷業界で使用されるモデルです。印刷出力に合わせた正確な色指定が必要な場合に利用します。
  • HSV (fromHsvF / fromHsv)
    • HLS と同様に、人間が色を認識する方法に近く、色相、彩度、明度を独立して調整したい場合に適しています。
    • カラーピッカーやスライダーなど、ユーザーインターフェースで色を選択する際に直感的です。
  • RGB (fromRgbF / fromRgb)
    • ハードウェアに最も近く、色の各成分を直接制御したい場合に適しています。
    • Webデザインなど、RGB値が既知の場合に便利です。
    • 単純な色指定に最も一般的です。