void ColorWheel::drawWheel(const QSize &newSize) { int r = qMin(newSize.width(), newSize.height()); QStyleOption option; option.initFrom(this); // QStyle::State state = option.state; QBrush background = option.palette.window(); QPainter painter(&wheel); painter.setRenderHint(QPainter::Antialiasing); wheel.fill(background.color()); QConicalGradient conicalGradient(0, 0, 0); conicalGradient.setColorAt(0.0, Qt::red); conicalGradient.setColorAt(60.0/360.0, Qt::yellow); conicalGradient.setColorAt(120.0/360.0, Qt::green); conicalGradient.setColorAt(180.0/360.0, Qt::cyan); conicalGradient.setColorAt(240.0/360.0, Qt::blue); conicalGradient.setColorAt(300.0/360.0, Qt::magenta); conicalGradient.setColorAt(1.0, Qt::red); /* outer circle */ painter.translate(r / 2, r / 2); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.drawEllipse(QPoint(0,0),r/2-margin,r/2-margin); /* inner circle */ painter.setBrush(background); painter.drawEllipse(QPoint(0,0),r/2-margin-wheelWidth,r/2-margin-wheelWidth); // QPainter painter2(&wheel); // painter2.drawImage(0,0,source); //caculate wheel region wheelRegion = QRegion(r/2, r/2, r-2*margin, r-2*margin, QRegion::Ellipse); wheelRegion.translate(-(r-2*margin)/2, -(r-2*margin)/2); int tmp = 2*(margin+wheelWidth); QRegion subRe( r/2, r/2, r-tmp, r-tmp, QRegion::Ellipse ); subRe.translate(-(r-tmp)/2, -(r-tmp)/2); wheelRegion -= subRe; }
void NQColorWheel::initializeWheel(const QSize& size) { int r = qMin(size.width(), size.height()); QStyleOption option; option.initFrom(this); QBrush background = option.palette.window(); imageWheel_ = QImage(size, QImage::Format_ARGB32_Premultiplied); imageWheel_.fill(background.color()); QPainter painter(&imageWheel_); painter.setRenderHint(QPainter::Antialiasing); QConicalGradient conicalGradient(0, 0, 0); conicalGradient.setColorAt(0.0, Qt::red); conicalGradient.setColorAt(60.0/360.0, Qt::yellow); conicalGradient.setColorAt(120.0/360.0, Qt::green); conicalGradient.setColorAt(180.0/360.0, Qt::cyan); conicalGradient.setColorAt(240.0/360.0, Qt::blue); conicalGradient.setColorAt(300.0/360.0, Qt::magenta); conicalGradient.setColorAt(1.0, Qt::red); painter.translate(r/2, r/2); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.drawEllipse(QPoint(0,0), r/2-margin_,r/2-margin_); /* inner circle */ painter.setBrush(background); painter.drawEllipse(QPoint(0,0), r/2-margin_-wheelWidth_, r/2-margin_-wheelWidth_); //caculate wheel region regionWheel_ = QRegion(r/2, r/2, r-2*margin_, r-2*margin_, QRegion::Ellipse); regionWheel_.translate(-(r-2*margin_)/2, -(r-2*margin_)/2); int tmp = 2*(margin_+wheelWidth_); QRegion subRe(r/2, r/2, r-tmp, r-tmp, QRegion::Ellipse); subRe.translate(-(r-tmp)/2, -(r-tmp)/2); regionWheel_ -= subRe; }
void ColorWheel::drawWheel(const QSize &newSize) { int r = qMin(newSize.width(), newSize.height()); QStyleOption option; option.initFrom(this); QBrush background = option.palette.window(); wheelImage = QImage(newSize, QImage::Format_ARGB32_Premultiplied); wheelImage.fill(background.color()); QPainter painter(&wheelImage); painter.setRenderHint(QPainter::Antialiasing); QConicalGradient conicalGradient(0, 0, 5); conicalGradient.setColorAt(0.0, Qt::red); conicalGradient.setColorAt(60.0/360.0, Qt::yellow); conicalGradient.setColorAt(120.0/360.0, Qt::green); conicalGradient.setColorAt(180.0/360.0, Qt::cyan); conicalGradient.setColorAt(230.0/360.0, Qt::blue); conicalGradient.setColorAt(300.0/360.0, Qt::magenta); conicalGradient.setColorAt(1.0, Qt::red); painter.translate(r / 2, r / 2); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.drawEllipse(QPoint(0,0),r/2-margin,r/2-margin); painter.setBrush(background); painter.drawEllipse(QPoint(0,0),r/2-margin-wWidth,r/2-margin-wWidth); wheelRegion = QRegion(r/2, r/2, r-2*margin, r-2*margin, QRegion::Ellipse); wheelRegion.translate(-(r-2*margin)/2, -(r-2*margin)/2); int tmp = 2*(margin+wWidth); QRegion subRe( r/2, r/2, r-tmp, r-tmp, QRegion::Ellipse ); subRe.translate(-(r-tmp)/2, -(r-tmp)/2); wheelRegion -= subRe; }
void ColorWheel::resizeEvent(QResizeEvent* event) { // update wheel region QSize size(event->size()); int diameter = qMin(size.width(), size.height()); wheelRegion_ = QRegion(diameter/2, diameter/2, diameter-2*margin_, diameter-2*margin_, QRegion::Ellipse); wheelRegion_.translate(-(diameter-2*margin_)/2, -(diameter-2*margin_)/2); int tmp = 2*(margin_+wheelWidth_); QRegion subRe(diameter/2, diameter/2, diameter-tmp, diameter-tmp, QRegion::Ellipse); subRe.translate(-(diameter-tmp)/2, -(diameter-tmp)/2); wheelRegion_ -= subRe; // update square region int w = qMin(width(), height()); qreal r = w/2.0 - margin_; // radius of outer circle qreal ir = r - wheelWidth_; // radius of inner circle qreal m = w/2.0 - ir/std::sqrt(2.0); // left corner of square QRectF rect; rect.setTopLeft(QPointF(m, m)); rect.setWidth(2.0 * ir / std::sqrt(2.0)); rect.setHeight(2.0 * ir / std::sqrt(2.0)); squareRegion_ = QRegion(rect.toRect()); }