Как использовать Qt QColormap в коде? - PullRequest
0 голосов
/ 30 мая 2018

Я хочу добиться чего-то подобного.
Color chart

Я изучил Qt QColormap, но не получил достаточно информации для его кодирования.Если кто-то знает, как это сделать.Пожалуйста, поделитесь фрагментом кода.

1 Ответ

0 голосов
/ 30 мая 2018

Это больше вопрос о цветовых моделях, чем Qt, но в основном вы пытаетесь сделать полный круг по краю HSL цветовой модели , сохраняя насыщенность.

Чтобы создать нечто подобное в Qt, вы будете использовать кисть градиента;так как мы хотим непрерывного смешивания, я использовал QLinearGradient .Если вы посмотрите на цветовое колесо выше, вы заметите, что красный цвет находится на 0 градусов, зеленый на 120 градусов, а синий на 240 градусов.QLinearGradient работает с диапазоном от 0 до 1, поэтому он преобразуется в 0, 1/3, 2/3 соответственно.Нам также нужно добавить конечную остановку, которая вернет градиент к красному цвету.

Я добавил немного альфа-канала, чтобы подавить цветовой тон, чтобы вы могли поэкспериментировать с этим;окончательный код будет выглядеть примерно так:

class ColorScale : public QWidget {
    Q_OBJECT
public:
    using QWidget::QWidget;

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.setOpacity(0.9);
        painter.setRenderHint(QPainter::HighQualityAntialiasing);
        QLinearGradient gradient(0, 0, 0, height());
        QGradientStops stops;
        stops << QGradientStop(0, Qt::red);
        stops << QGradientStop(1.0/3, Qt::blue);
        stops << QGradientStop(2.0/3, Qt::green);
        stops << QGradientStop(1, Qt::red);

        gradient.setStops(stops);

        painter.fillRect(rect(), gradient);
    }
};

И он выдаст это:

Color scale

Вы можете добавить метки, вызвав QPainter :: DrawText .

...