Как сделать пользовательскую палитру цветов в Qt? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь сделать пользовательскую палитру цветов, у меня должно быть все, что мне нужно, чтобы заполнить изображение цветами. Когда я запускаю программу, она не отображает ничего, кроме виджета без цветов, который я могу переместить влево или вверх.

Я добавил QWidget во вкладку дизайнера и добавил его в новый класс с именем ColorPicker. Я добавил защищенную функцию paintEvent в мой заголовочный файл.

Мой файл CPP ColorPicker:

#include "colorselector.h"

ColorSelector::ColorSelector(QWidget *parent) : QWidget(parent)
{
}

void ColorSelector::paintEvent(QPaintEvent *){
    QColor c;
    QImage pic(360,20,QImage::Format_RGB32);
    for(int x=0; x < 360; x++){
       for(int y=0; y < 20; y++){
           c.setHsl(x,255,127);
           pic.setPixel(x,y,c.rgb());
           }
     }
}

Мой заголовочный файл ColorPicker:

#ifndef COLORSELECTOR_H
#define COLORSELECTOR_H

#include <QWidget>

class ColorSelector : public QWidget
{
    Q_OBJECT
public:
    explicit ColorSelector(QWidget *parent = nullptr);
protected:
    void paintEvent(QPaintEvent *);

signals:

public slots:
};

#endif // COLORSELECTOR_H

Это должно дать мне радугу цветов в QWidget.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

в селекторе цвета вы можете нарисовать фон виджета, используя r, g, b, a из Qslider, например

void paintEvent(QPaintEvent* e) {
    QPainter painter{this};
    //and now fill the background!
    painter.setBrush(QColor(r.value(), g.value(), b.value(), a.value()));
0 голосов
/ 24 апреля 2019

Это не то, что вы точно хотите, но может показать вам хорошее видение для этого. у вас может быть три QSlider , которые представляют 3 основных цвета: красный, зеленый и синий, значение ползунков должно быть в диапазоне от 0 до 255 для каждого из них.

Затем создайте квадратный Qlabel и нарисуйте backgroundColor его css с помощью ползунков, примерно так:

QLabel* label = new QLabel;
label->->setStyleSheet("background-color:rgb(slider1->value();,sliderGreen->value();,slideBlue->value(););");

Чувак, это просто концепция кода, а не код, пожалуйста, переписать его, а не вставить, спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...