xam*_*xam 5 c++ qt gradient qstyle
我正在尝试使用QGraphicsView生成可单击的HVS颜色空间小部件。整个QGraphicsView的背景应类似于下图(无jpeg-artefacts)。单击位置x,y将显示光标下方的颜色。

我不想直接使用图像,而是想过要使用qstylesheets在两个方向(水平和垂直)上使用qlineargradient。实际上我不知道该怎么做!
简单地使用水平色标是直截了当的,我不知道如何添加额外的垂直(白色-黑色)渐变。我到目前为止(从QGraphicsView继承的类的内部构造函数中)得到的是:
QColor hsvColor[6];
hsvColor[0].setHsv(0, 255, 255);
hsvColor[1].setHsv(60, 255, 255);
hsvColor[2].setHsv(120, 255, 255);
hsvColor[3].setHsv(180, 255, 255);
hsvColor[4].setHsv(240, 255, 255);
hsvColor[5].setHsv(300, 255, 255);
QString styleH = QString("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,") +
QString("stop:0.000 rgba(%1, %2, %3, 255),").arg( hsvColor[0].red() ).arg( hsvColor[0].green() ).arg( hsvColor[0].blue() ) +
QString("stop:0.166 rgba(%1, %2, %3, 255),").arg( hsvColor[1].red() ).arg( hsvColor[1].green() ).arg( hsvColor[1].blue() ) +
QString("stop:0.333 rgba(%1, %2, %3, 255),").arg( hsvColor[2].red() ).arg( hsvColor[2].green() ).arg( hsvColor[2].blue() ) +
QString("stop:0.500 rgba(%1, %2, %3, 255),").arg( hsvColor[3].red() ).arg( hsvColor[3].green() ).arg( hsvColor[3].blue() ) +
QString("stop:0.666 rgba(%1, %2, %3, 255),").arg( hsvColor[4].red() ).arg( hsvColor[4].green() ).arg( hsvColor[4].blue() ) +
QString("stop:0.833 rgba(%1, %2, %3, 255),").arg( hsvColor[5].red() ).arg( hsvColor[5].green() ).arg( hsvColor[5].blue() ) +
QString("stop:1.000 rgba(%1, %2, %3, 255));").arg( hsvColor[0].red() ).arg( hsvColor[0].green() ).arg( hsvColor[0].blue() );
this->setStyleSheet(styleH);
Run Code Online (Sandbox Code Playgroud)
这给了我:
我尝试了一段时间,现在在这里问:
是否可以使用qlineargradient和qstylesheets绘制如上的xy渐变?
也许有人可以给我提示如何使用qstylesheets ...
非常感谢您,谢谢XAM
我知道这已经很老了,但它可能仍然对其他人有帮助。
因此,基本上,这里的技巧是在QGraphicsView中具有2个梯度,一组作为颜色的背景(从左到右),一组作为前景(从上到下)。
// a colored background based on hue
QLinearGradient colorGradient = QLinearGradient(0, 0, width(), 0);
colorGradient.setSpread(QGradient::RepeatSpread);
colorGradient.setColorAt(0, QColor(255,255,255));
colorGradient.setColorAt(1, currentHue);
QLinearGradient blackGradient = QLinearGradient(0, 0, 0, height());
blackGradient.setSpread(QGradient::RepeatSpread);
blackGradient.setColorAt(0, QColor(0,0,0,0));
blackGradient.setColorAt(1, QColor(0,0,0,255));
QBrush colorGradiantBrush = QBrush(colorGradient);
QBrush blackGradiantBrush = QBrush(blackGradient);
scene.setBackgroundBrush(colorGradiantBrush);
scene.setForegroundBrush(blackGradiantBrush);
Run Code Online (Sandbox Code Playgroud)
上面的代码为您提供了一种具有以下颜色的调色板:

对于前景,我使用从透明到黑色的颜色-您将需要从白色到透明到黑色的颜色。对于背景,我使用了白色至特定的颜色-您可以使用已有的光谱。