您是正确的,hsl()
并且hsv()
在Qt中产生相同的颜色。这可能是错误,也可能是不支持HSL着色的结果。如果您需要即时从HSL转换为HSV,可以执行以下操作:
int H_hsv = H_hsl; // This is the easy one of course
double V_hsv = (2 * L_hsl + S_hsl * (1 - abs(2 * L_hsl - 1))) / 2;
double S_hsv = (2 * (V_hsv - L_hsl)) / V_hsv;
如果你有H_hsl
一个int
范围[0-360]
和double
小号 S_hsl
,并L_hsl
在范围内十进制百分比[0.0,1.0]
。然后将所得的值可以被转换为QString
使用SQstring::number()
或到std::string
S使用std::to_string()
并连接起来以构建stylesheet
论点,即
setStyleSheet("background-color: hsv("+QString::number(H_hsv)+", "
+QString::number(S_hsv * 100)+"%, "+QString::number(V_hsv * 100)+"%);");
#include <QtWidgets/QApplication>
#include <qwidget.h>
#include <qmainwindow.h>
#include <cmath>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow* main = new QMainWindow;
QWidget* central = new QWidget();
double S_hsl = 1;
double L_hsl = 1;
int H_hsl = 120;
int H_hsv = H_hsl; // This is the easy one of course
double V_hsv = (2 * L_hsl + S_hsl * (1 - abs(2 * L_hsl - 1))) / 2;
double S_hsv = (2 * (V_hsv - L_hsl)) / V_hsv;
central->setStyleSheet("background-color: hsv(" + QString::number(H_hsv) + ", "
+ QString::number(S_hsv * 100) + "%, " + QString::number(V_hsv*100) + "%);");
main->setCentralWidget(central);
main->resize(600, 400);
main->show();
return a.exec();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句