qlineargradient horizo​​ntal&垂直

时间:2013-11-25 15:02:47

标签: c++ qt gradient qstyle

我试图使用QGraphicsView生成可点击的HVS色彩空间小部件。整个QGraphicsView的背景应如下图所示(没有jpeg-artefacts)。单击位置x,y将给出光标下的颜色。

enter image description here

我不想直接使用图像,而是考虑使用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);

这给了我:

enter image description here

我尝试了一段时间,现在问这里:

是否可以使用qlineargradient&amp ;;绘制上面的xy-gradient。 qstylesheets?

也许有人可以使用qstylesheets给我一个如何做的提示......

非常感谢你,亲切地看待xam

1 个答案:

答案 0 :(得分:3)

我知道现在已经很老了,但它可能仍然有助于其他人。

所以基本上这里的诀窍是在你的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);

上面的代码为您提供了一种颜色如下的调色板:

result

对于前景我使用透明到黑色 - 你需要一个白色到透明的黑色。对于背景我使用了白色到特定的颜色 - 你可以使用你已有的光谱。