Qt QColor::setHsl()徹底解説:HSLカラーモデルで色を操る
QColor::setHsl()
とは
QColor
クラスは、色を表現するためのQtのクラスです。通常、色はRGB(赤、緑、青)で表現されることが多いですが、QColor
はRGBの他に、HSV(Hue, Saturation, Value)、CMYK(Cyan, Magenta, Yellow, Key/Black)、そして**HSL(Hue, Saturation, Lightness)**といった様々な色モデルをサポートしています。
QColor::setHsl()
メソッドは、このHSL色モデルを使ってQColor
オブジェクトの色を設定するための関数です。
HSL色モデルについて
HSLは、人間の色の認識に近い形で色を表現できるため、デザインなどでよく使われます。それぞれの要素は以下の通りです。
- L (Lightness - 輝度/明度):
- 色の明るさを表します。
- 0から255までの値で表現されます。
- 0は完全に黒、255は完全に白を示します。128が元の色の明るさの中間点と考えることができます。
- S (Saturation - 彩度):
- 色の鮮やかさを表します。
- 0から255までの値で表現されます。
- 0は彩度がなく灰色に近い色(無彩色)、255は最も鮮やかな色(純色)を示します。
- H (Hue - 色相):
- 色の種類(赤、オレンジ、黄、緑、青、紫など)を表します。
- 通常、0から359までの角度で表現され、色相環上の位置に対応します。
- 0度は赤、120度は緑、240度は青に対応します。
QColor::setHsl()
の引数
setHsl()
メソッドは、通常以下の引数を取ります。
void QColor::setHsl(int h, int s, int l, int a = 255)
a
: アルファ値 (Alpha)。色の不透明度を表します。0(完全に透明)から255(完全に不透明)までの整数値。デフォルトは255です。l
: 輝度 (Lightness)。0から255までの整数値。s
: 彩度 (Saturation)。0から255までの整数値。h
: 色相 (Hue)。0から359までの整数値。
また、浮動小数点数版のsetHslF()
も存在し、こちらは0.0から1.0までの範囲で値を指定します。
使用例
#include <QColor>
#include <QDebug>
int main() {
QColor myColor;
// HSLで色を設定する例
// 色相: 0 (赤), 彩度: 255 (鮮やか), 輝度: 128 (中間)
myColor.setHsl(0, 255, 128); // 鮮やかな赤
qDebug() << "HSL (0, 255, 128) の色:" << myColor.name(); // RGB形式で表示される (例: "#FF0000")
// 別の例:薄い青
myColor.setHsl(240, 100, 200); // 色相:240(青), 彩度:100(ややくすんだ), 輝度:200(明るめ)
qDebug() << "HSL (240, 100, 200) の色:" << myColor.name(); // 例: "#9999FF" (薄い青)
// アルファ値を設定する例
myColor.setHsl(120, 255, 128, 128); // 鮮やかな緑で半透明
qDebug() << "HSL (120, 255, 128, 128) の色:" << myColor.name(QColor::HexArgb); // 例: "#8000FF00" (半透明の緑)
return 0;
}
このコードでは、QColor::setHsl()
を使って異なる色をHSL値で設定し、その結果をqDebug()
で出力しています。
- 色のバリエーション生成
特定の色相を固定し、彩度や輝度を変えることで、トーンの異なる色のバリエーションを簡単に生成できます。 - デザインツールとの親和性
多くのグラフィックデザインソフトウェアやCSSなどでHSLが使われているため、デザインとの連携がスムーズです。 - 直感的な色の調整
HSLは、RGBに比べて人間が色を認識する方法に近いため、「この色をもう少し明るくしたい」「この色をもう少し鮮やかにしたい」といった直感的な色の調整がしやすいです。
引数の範囲外の値
最もよくある間違いは、setHsl()
の引数に指定する値が期待される範囲外であることです。
- A (Alpha - アルファ値): 0〜255
- L (Lightness - 輝度/明度): 0〜255
- S (Saturation - 彩度): 0〜255
- H (Hue - 色相): 0〜359
よくあるエラー例
myColor.setHsl(120, 255, -10);
(輝度が0を下回っている)myColor.setHsl(120, 300, 128);
(彩度が255を超えている)myColor.setHsl(360, 255, 128);
(色相が360になっている)
トラブルシューティング
- デバッグ出力
qDebug()
を使って、setHsl()
に渡す値が実際にどうなっているかを確認します。 - 値の検証
setHsl()
を呼び出す前に、渡す値が正しい範囲内にあることを確認するコードを追加することを検討してください。例えば、qBound()
や単純なif
文で値をクランプ(制限)することができます。int h = someValueH; int s = someValueS; int l = someValueL; int a = someValueA; // 範囲内にクランプする例 h = qBound(0, h, 359); s = qBound(0, s, 255); l = qBound(0, l, 255); a = qBound(0, a, 255); myColor.setHsl(h, s, l, a);
- Qtのドキュメントを確認する
各引数の正しい範囲を常にQtの公式ドキュメントで確認してください。
HSLの理解不足による意図しない色
HSLモデルの各要素が色にどのように影響するかを完全に理解していないと、期待と異なる色になることがあります。
よくあるエラー例
- 純粋な白や黒にならない
- 白
Lightnessが255に近い値(例: 255)で、Saturationが0に非常に近い(例: 0)。 - 黒
Lightnessが0に非常に近い値(例: 0)。この場合、HueとSaturationはほとんど意味を持ちません。
- 白
- 「鮮やかな色」を指定したいのに灰色に近い色になる
彩度(Saturation)が低い値(例: 0〜50)だと、色相や輝度に関わらず、灰色がかったくすんだ色になります。 - 「明るい色」を指定したいのに黒に近い色になる
輝度(Lightness)が低い値(例: 0〜50)だと、彩度が高くても非常に暗い色になります。
トラブルシューティング
- 試行錯誤
小さなプロジェクトで様々なHSL値を試してみて、色の変化を観察します。 - HSL色空間の視覚化ツールを使う
HSLスライダーやカラーピッカーなど、HSLを視覚的に操作できるツールを使って、各値が色にどう影響するかを理解する練習をしてください。オンラインのカラーピッカーなどが役立ちます。
setHslF() (浮動小数点数版) との混同
setHsl()
には整数引数版と、setHslF()
という浮動小数点数(qreal
、通常はdouble
)引数版があります。これらの違いを混同するとエラーにつながります。
setHslF(qreal h, qreal s, qreal l, qreal a = 1.0)
: 引数は0.0-1.0(すべて)の浮動小数点数。setHsl(int h, int s, int l, int a = 255)
: 引数は0-359(H)または0-255(S, L, A)の整数。
よくあるエラー例
myColor.setHsl(0.5, 0.8, 0.7);
(整数関数に浮動小数点数を渡している)myColor.setHslF(120, 255, 128);
(浮動小数点数関数に整数値を渡している)
トラブルシューティング
- 型キャスト
必要に応じて、static_cast<int>(value)
やstatic_cast<qreal>(value)
のように型キャストを行います。ただし、整数と浮動小数点の間の変換では値のスケールに注意が必要です(例: 255を1.0にスケールする)。// 整数値を0.0-1.0の浮動小数点数に変換してsetHslFに渡す例 int s_int = 200; qreal s_float = s_int / 255.0; // 0.0から1.0にスケール myColor.setHslF(120.0/360.0, s_float, 0.5); // Hは0.0-1.0なので注意
- 正しい関数を選択する
使用したい値の型(整数か浮動小数点数か)に応じて、setHsl()
またはsetHslF()
のどちらかを正しく選択してください。
QPainterなどでの描画時に色が反映されない
QColor
オブジェクトは正しく設定されているはずなのに、画面に描画される色が期待通りにならない場合があります。
よくある原因とトラブルシューティング
- 異なる色モデル間の変換
setHsl()
で色を設定した後、その色をRGB値として取得(myColor.red()
など)して他のAPIに渡す場合、変換の際にわずかな丸め誤差が生じることがあります。通常は問題になりませんが、厳密な色の再現が必要な場合は注意が必要です。 - ウィジェットのパレット設定
ウィジェットの色は、そのパレット(QPalette
)によって制御される場合があります。setHsl()
で設定したQColor
をウィジェットのパレットに適用しないと、見た目が変わらないことがあります。QColor myColor; myColor.setHsl(0, 255, 128); QPalette palette = myWidget->palette(); palette.setColor(QPalette::Window, myColor); // ウィジェットの背景色を変更 myWidget->setPalette(palette); myWidget->setAutoFillBackground(true); // 背景を自動で塗りつぶす設定も必要
- アルファ値が0になっている
setHsl()
の最後の引数(アルファ値)が0(完全に透明)になっていると、何も描画されません。意図しない透明度になっていないか確認してください。 - QPainterのペン/ブラシに設定し忘れている
QPainter
で色を使用するには、setPen()
やsetBrush()
でQColor
オブジェクトを設定する必要があります。QPainter painter(this); // thisは描画対象ウィジェット QColor myColor; myColor.setHsl(0, 255, 128); // 鮮やかな赤 painter.setBrush(myColor); // ここで色を設定 painter.drawRect(10, 10, 100, 100);
QMLからのQColorの扱い
C++で定義したQColor
をQMLに渡す場合や、QML側で色を扱う場合、型変換の問題が発生することがあります。
- デバッグ
QMLのJavaScriptデバッガを使って、QML側で受け取ったcolor
プロパティがどのような値になっているかを確認します。 - プロパティの登録
C++のクラスをQMLに公開し、QColor
型のプロパティを持つ場合、Q_PROPERTY
マクロで正しく登録されていることを確認してください。 - QMLのcolor型
QMLではcolor
という専用の型があり、C++のQColor
は自動的にQMLのcolor
に変換されます。しかし、QVariant
などを介して渡す場合に、型が正しく認識されないことがあります。
C++での基本的な使用例(QPainterによる描画)
この例では、QColor::setHsl()
を使って異なるHSL値を持つ色を作成し、それをQPainter
でウィジェット上に描画します。
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QColor>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
#include <QPainter>
#include <QDebug> // デバッグ出力用
MyWidget::MyWidget(QWidget *parent)
: QWidget{parent}
{
setWindowTitle("QColor::setHsl() Examples");
setFixedSize(400, 300); // ウィンドウサイズを固定
}
void MyWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); // アンチエイリアシングを有効にする
// 1. 基本的な赤 (Hue:0, Saturation:255, Lightness:128)
QColor redColor;
redColor.setHsl(0, 255, 128); // 鮮やかな赤
painter.setBrush(redColor);
painter.drawRect(20, 20, 80, 80);
painter.drawText(20, 110, "Hue:0, Sat:255, Ligh:128 (Red)");
qDebug() << "Red HSL Color:" << redColor.name(QColor::HexArgb); // デバッグ出力
// 2. 青 (Hue:240, Saturation:200, Lightness:150)
QColor blueColor;
blueColor.setHsl(240, 200, 150); // やや明るい青
painter.setBrush(blueColor);
painter.drawRect(120, 20, 80, 80);
painter.drawText(120, 110, "Hue:240, Sat:200, Ligh:150 (Blue)");
qDebug() << "Blue HSL Color:" << blueColor.name(QColor::HexArgb);
// 3. 半透明の緑 (Hue:120, Saturation:255, Lightness:100, Alpha:128)
QColor greenTransparentColor;
greenTransparentColor.setHsl(120, 255, 100, 128); // 鮮やかな緑、半透明
painter.setBrush(greenTransparentColor);
painter.drawRect(220, 20, 80, 80);
painter.drawText(220, 110, "Hue:120, Sat:255, Ligh:100, Alpha:128 (Green)");
qDebug() << "Green Transparent HSL Color:" << greenTransparentColor.name(QColor::HexArgb);
// 4. 明度を変えたグレー(無彩色:Saturation=0)
QColor grayColor;
grayColor.setHsl(0, 0, 150); // 色相は無視される, 彩度0で灰色、明度150
painter.setBrush(grayColor);
painter.drawRect(320, 20, 80, 80);
painter.drawText(320, 110, "Hue:0, Sat:0, Ligh:150 (Gray)");
qDebug() << "Gray HSL Color:" << grayColor.name(QColor::HexArgb);
// 5. setHslF() を使った例 (浮動小数点数)
QColor yellowFColor;
yellowFColor.setHslF(60.0 / 360.0, 1.0, 0.7); // HSLを0.0-1.0で指定 (鮮やかな黄色の明るめ)
painter.setBrush(yellowFColor);
painter.drawRect(20, 150, 80, 80);
painter.drawText(20, 240, "Hue:60, Sat:1.0, Ligh:0.7 (YellowF)");
qDebug() << "YellowF HSL Color:" << yellowFColor.name(QColor::HexArgb);
}
main.cpp
#include <QApplication>
#include "mywidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
このコードを実行すると、HSL値に基づいて異なる色が描画されたウィンドウが表示されます。コンソールには、それぞれの色の16進数ARGB値も出力されます。
C++で色を動的に変更する例(QSliderとの連携)
この例では、スライダーを使ってリアルタイムでHSL値を変更し、動的に色が変わる矩形を表示します。
colorsliderwidget.h
#ifndef COLORSLIDERWIDGET_H
#define COLORSLIDERWIDGET_H
#include <QWidget>
#include <QSlider>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
class ColorSliderWidget : public QWidget
{
Q_OBJECT
public:
explicit ColorSliderWidget(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
private slots:
void updateColor();
private:
QSlider *hueSlider;
QSlider *saturationSlider;
QSlider *lightnessSlider;
QSlider *alphaSlider;
QLabel *hueLabel;
QLabel *saturationLabel;
QLabel *lightnessLabel;
QLabel *alphaLabel;
QColor currentColor; // 現在の色
};
#endif // COLORSLIDERWIDGET_H
colorsliderwidget.cpp
#include "colorsliderwidget.h"
#include <QPainter>
#include <QDebug>
ColorSliderWidget::ColorSliderWidget(QWidget *parent)
: QWidget{parent}
{
setWindowTitle("Dynamic HSL Color");
setFixedSize(400, 450);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
QHBoxLayout *slidersLayout = new QHBoxLayout();
QVBoxLayout *labelsLayout = new QVBoxLayout();
// HUE スライダー
hueSlider = new QSlider(Qt::Horizontal, this);
hueSlider->setRange(0, 359);
hueSlider->setValue(0);
hueLabel = new QLabel("Hue: 0", this);
slidersLayout->addWidget(hueSlider);
labelsLayout->addWidget(hueLabel);
// Saturation スライダー
saturationSlider = new QSlider(Qt::Horizontal, this);
saturationSlider->setRange(0, 255);
saturationSlider->setValue(255);
saturationLabel = new QLabel("Saturation: 255", this);
slidersLayout->addWidget(saturationSlider);
labelsLayout->addWidget(saturationLabel);
// Lightness スライダー
lightnessSlider = new QSlider(Qt::Horizontal, this);
lightnessSlider->setRange(0, 255);
lightnessSlider->setValue(128);
lightnessLabel = new QLabel("Lightness: 128", this);
slidersLayout->addWidget(lightnessSlider);
labelsLayout->addWidget(lightnessLabel);
// Alpha スライダー
alphaSlider = new QSlider(Qt::Horizontal, this);
alphaSlider->setRange(0, 255);
alphaSlider->setValue(255);
alphaLabel = new QLabel("Alpha: 255", this);
slidersLayout->addWidget(alphaSlider);
labelsLayout->addWidget(alphaLabel);
mainLayout->addLayout(labelsLayout);
mainLayout->addLayout(slidersLayout);
// スライダーの値が変更されたらupdateColor()を呼び出す
connect(hueSlider, &QSlider::valueChanged, this, &ColorSliderWidget::updateColor);
connect(saturationSlider, &QSlider::valueChanged, this, &ColorSliderWidget::updateColor);
connect(lightnessSlider, &QSlider::valueChanged, this, &ColorSliderWidget::updateColor);
connect(alphaSlider, &QSlider::valueChanged, this, &ColorSliderWidget::updateColor);
updateColor(); // 初期色を設定
}
void ColorSliderWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 現在の色で矩形を描画
painter.setBrush(currentColor);
painter.drawRect(50, mainLayout()->geometry().bottom() + 20, 300, 100); // スライダーの下に描画
}
void ColorSliderWidget::updateColor()
{
int h = hueSlider->value();
int s = saturationSlider->value();
int l = lightnessSlider->value();
int a = alphaSlider->value();
currentColor.setHsl(h, s, l, a); // HSL値で色を設定
hueLabel->setText(QString("Hue: %1").arg(h));
saturationLabel->setText(QString("Saturation: %1").arg(s));
lightnessLabel->setText(QString("Lightness: %1").arg(l));
alphaLabel->setText(QString("Alpha: %1").arg(a));
// 色の更新を強制するために再描画を要求
update();
}
main.cpp
#include <QApplication>
#include "colorsliderwidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ColorSliderWidget w;
w.show();
return a.exec();
}
この例では、スライダーを動かすことでリアルタイムに色が変化する様子を確認できます。HSL色空間の各要素が色にどのように影響するかを視覚的に理解するのに役立ちます。
QMLでの使用例
QMLでは、color
プロパティがQColorに対応しており、HSL値を使用して色を指定するためのQt.hsla()
関数が提供されています。
main.cpp (QMLをロードするためのC++コード)
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QColor> // QMLからQColorを直接扱うことは少ないですが、型として存在します
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed,
&app, []() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: "QML HSL Color Example"
Column {
anchors.fill: parent
anchors.margins: 20
spacing: 10
// HSLで色を設定するRectangle
Rectangle {
width: parent.width
height: 100
// Qt.hsla(h, s, l, a) を使用。h, s, l, a は全て0.0から1.0の範囲。
// h: 0.0-1.0 (0.0=0度, 1.0=360度)
// s: 0.0-1.0 (0.0=無彩色, 1.0=純色)
// l: 0.0-1.0 (0.0=黒, 1.0=白, 0.5が中間)
// a: 0.0-1.0 (0.0=透明, 1.0=不透明)
color: Qt.hsla(0.0, 1.0, 0.5, 1.0) // 鮮やかな赤 (H:0, S:100%, L:50%, A:100%)
border.color: "black"
border.width: 1
Text {
text: "Red (H:0, S:1.0, L:0.5)"
anchors.centerIn: parent
color: "white"
font.pixelSize: 18
}
}
Rectangle {
width: parent.width
height: 100
color: Qt.hsla(0.66, 0.8, 0.6, 0.7) // 青っぽい色 (H:240/360=0.66, S:0.8, L:0.6, A:0.7)
border.color: "black"
border.width: 1
Text {
text: "Bluish (H:0.66, S:0.8, L:0.6, A:0.7)"
anchors.centerIn: parent
color: "white"
font.pixelSize: 18
}
}
Rectangle {
width: parent.width
height: 100
color: Qt.hsla(0.0, 0.0, 0.8, 1.0) // 明るいグレー (H:無視, S:0.0, L:0.8, A:1.0)
border.color: "black"
border.width: 1
Text {
text: "Light Gray (S:0.0, L:0.8)"
anchors.centerIn: parent
color: "black" // テキストの色を黒にして見やすくする
font.pixelSize: 18
}
}
}
}
このQMLコードでは、3つの異なるHSL値を持つ矩形が表示されます。QMLのQt.hsla()
は、C++のQColor::setHslF()
に相当し、全ての引数が0.0から1.0の浮動小数点数で指定される点に注意してください。
QColor
クラスは、様々な色モデルでの色設定に対応しています。主な代替方法を以下に示します。
RGB(Red, Green, Blue)モデルでの設定
最も一般的な色モデルです。コンピュータのディスプレイは通常RGBで色を表現します。
-
コンストラクタによる初期化:
QColor
オブジェクトをRGB値で直接初期化できます。QColor color(255, 0, 0); // 赤 QColor color(0, 255, 0, 128); // 半透明の緑
-
void QColor::setRgb(QRgb rgb)
:QRgb
型(unsigned int
でRGBA値をパックしたもの)で色を設定します。qRgb()
やqRgba()
関数を使ってQRgb
値を作成できます。 -
void QColor::setRgbF(qreal r, qreal g, qreal b, qreal a = 1.0)
: 浮動小数点数(0.0〜1.0)でRGBとアルファ値を指定します。 -
void QColor::setRgb(int r, int g, int b, int a = 255)
: 赤、緑、青、アルファ値(不透明度)を0〜255の整数で指定します。r
: 赤成分g
: 緑成分b
: 青成分a
: アルファ値(透明度、デフォルトは255で不透明)
使いどころ:
- ハードウェア(ディスプレイなど)と直接的に連携する場合。
- グラフィックデザインツールでRGB値が指定されている場合。
- CSSやHTMLのカラーコード(
#RRGGBB
)に慣れている場合。
HSV(Hue, Saturation, Value)モデルでの設定
HSVはHSLと似ていますが、Value(明度)の定義が異なります。Valueは色の純粋な明るさを示し、HSLのLightnessは色の明るさの中間点(50%)が最も「明るい」と感じられるように設計されています。
-
void QColor::setHsvF(qreal h, qreal s, qreal v, qreal a = 1.0)
: 浮動小数点数(0.0〜1.0、ただしHueは0.0〜359.0)でHSVとアルファ値を指定します。 -
void QColor::setHsv(int h, int s, int v, int a = 255)
: 色相、彩度、明度、アルファ値を指定します。h
: 色相 (0〜359)s
: 彩度 (0〜255)v
: 明度 (0〜255, 0は黒、255は最も明るい)a
: アルファ値 (0〜255)
使いどころ:
- 一部の画像処理アルゴリズムやカラーピッカーでHSVが使われている場合。
- 色のバリエーションを生成する際に、明度を維持しつつ彩度や色相を変更したい場合。
CMYK(Cyan, Magenta, Yellow, Key/Black)モデルでの設定
主に印刷業界で使われる減法混色モデルです。
void QColor::setCmykF(qreal c, qreal m, qreal y, qreal k, qreal a = 1.0)
: 浮動小数点数(0.0〜1.0)でCMYKとアルファ値を指定します。void QColor::setCmyk(int c, int m, int y, int k, int a = 255)
: シアン、マゼンタ、イエロー、キー(黒)、アルファ値を0〜255の整数で指定します。
使いどころ:
- CMYK値で指定された既存の色情報を扱う場合。
- 印刷用のアプリケーションを開発する場合。
名前付き色(Named Colors)による設定
Qtは、Webカラーなど、多くの標準的な色名を認識します。
- Qt::GlobalColor enum:
Qt
名前空間には、Qt::red
,Qt::blue
,Qt::white
,Qt::black
,Qt::transparent
などの基本的な色が定義されています。 void QColor::setNamedColor(const QString &name)
:"red"
,"blue"
,"darkGray"
,"lightBlue"
,"salmon"
などの文字列で色を設定します。また、"#RRGGBB"
や"#AARRGGBB"
のような16進数表記の文字列も認識します。
使いどころ:
- ユーザーが色名を直接入力するUIを実装する場合。
- 一般的なWebカラーやCSSカラーを使用したい場合。
- コードの可読性を高めたい場合(例:
myColor = Qt::red;
)。
QColor::from...() 静的関数による生成
QColor
のインスタンスを生成する際に、直接指定した色モデルの値から作成できます。
- (浮動小数点数版も同様に
fromRgbF()
,fromHslF()
などがあります) static QColor QColor::fromCmyk(int c, int m, int y, int k, int a = 255)
static QColor QColor::fromHsv(int h, int s, int v, int a = 255)
static QColor QColor::fromHsl(int h, int s, int l, int a = 255)
static QColor QColor::fromRgb(int r, int g, int b, int a = 255)
使いどころ:
- 一時的な
QColor
オブジェクトを関数呼び出し内で作成する場合。 - 新しい
QColor
オブジェクトを作成する際に、特定のカラーモデルで値を直接指定したい場合。
QColor::lighter() / QColor::darker()
既存の色の明度を相対的に調整したい場合に便利です。
QColor QColor::darker(int factor = 200) const
: 現在の色よりも暗い色を返します。factor
はパーセンテージで、デフォルトの200は50%暗くします。QColor QColor::lighter(int factor = 150) const
: 現在の色よりも明るい色を返します。factor
はパーセンテージで、デフォルトの150は50%明るくします。
使いどころ:
- グラデーションの中間色を生成する場合。
- UI要素のホバー状態やクリック状態の色を、元の色から自動生成したい場合。