为什么background-color:qt css中的hsl()与Web CSS中的工作方式不同

用户名

例如,background-color: hsl(120, 100%, 100%)在浏览器中为白色,而在Qt中为浅绿色。看来,hsl()Qt CSS中的功能的行为类似于HSV。还是我错了?在此处输入图片说明

威廉·米勒

您是正确的,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::stringS使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么“ *”在不同命令中的工作方式不同?

为什么 ifelse() 与 R 中的 if(){}else{} 工作方式不同

为什么解构的工作方式与Javascript(ES6)中的经典分配方式不同?

为什么从Java 9中的Java 8确实String.replaceAll()工作方式不同?

为什么if(Boolean.TRUE){...}和if(true){...}在Java中的工作方式不同

为什么*在赋值语句和函数调用中的工作方式不同?

为什么类型推断在 Java 中的 lambda 和方法引用上的工作方式不同?

为什么scala.beans.beanproperty在Spark中的工作方式有所不同

为什么Math.Round()在C#中的工作方式不同

为什么这种常规代码在jenkins管道脚本中的工作方式不同

为什么在我的Lua代码中自上而下和自下而上的工作方式不同?

为什么在`let`中调用`make-instance`的工作方式不同?

为什么在 Python 中调用函数和编写语句的工作方式不同?

为什么此相关子查询在Oracle和SQL Server中的工作方式不同

为什么列表和字符串上的方法在python中的工作方式不同

为什么即使在 python try 中几乎相同的代码,它的工作方式却不同?

为什么宏和函数对 c 中的相同代码的工作方式不同

为什么html5应用程序在浏览器中的工作方式不同于在Cordova(Android)中的工作方式?

为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

为什么在外部分配时,闭包中的本地分配变量工作方式不同?

为什么 navigator.mediaDevices 在本地主机和服务器中的工作方式不同?

为什么 setTimeout 和 setInterval 在浏览器和 Node.js 中的工作方式不同?

为什么在C ++中2D和1D数组中auto在“范围为”中的工作方式不同

CSS3转换属性在Internet Explorer中的工作方式不同

CSS动画在Chrome中的工作方式有所不同

CSS在Chrome和IE 8中的工作方式有所不同

python any() 的工作方式不同,为什么 [1,3,5] 中的 any([1,2]) 返回 True 而 ['a','v' 中的 any(['a','b']) 不返回, 'X']?

什么是android中的Application Sandwork及其工作方式?

什么是`。命令的含义以及它在Linux中的工作方式?