void Draw::brushChanged() { Qt::BrushStyle style = Qt::BrushStyle(brushStyleComboBox->itemData( brushStyleComboBox->currentIndex(), IdRole).toInt()); if (style == Qt::LinearGradientPattern) { QLinearGradient linearGradient(0, 0, 100, 100); linearGradient.setColorAt(0.0, Qt::white); linearGradient.setColorAt(0.2, Qt::green); linearGradient.setColorAt(1.0, Qt::black); m_renderArea->setBrush(linearGradient); } else if (style == Qt::RadialGradientPattern) { QRadialGradient radialGradient(50, 50, 50, 70, 70); radialGradient.setColorAt(0.0, Qt::white); radialGradient.setColorAt(0.2, Qt::green); radialGradient.setColorAt(1.0, Qt::black); m_renderArea->setBrush(radialGradient); } else if (style == Qt::ConicalGradientPattern) { QConicalGradient conicalGradient(50, 50, 150); conicalGradient.setColorAt(0.0, Qt::white); conicalGradient.setColorAt(0.2, Qt::green); conicalGradient.setColorAt(1.0, Qt::black); m_renderArea->setBrush(conicalGradient); } else if (style == Qt::TexturePattern) { m_renderArea->setBrush(QBrush(QPixmap(":/resources/brick.png"))); } else { m_renderArea->setBrush(QBrush(Qt::green, style)); } }
void ColorWheel::drawOuterRing(QPainter &painter) { int r = qMin(this->width(), this->height()); QPointF center(r/2.0, r/2.0); // paint hue wheel painter.save(); QConicalGradient conicalGradient(center, 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); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); // outer circle QPainterPath path; path.addEllipse(center, r/2.0 - margin_, r/2.0 - margin_); // inner circle path.addEllipse(center, r/2.0 - margin_ - wheelWidth_, r/2.0 - margin_ - wheelWidth_); painter.drawPath(path); painter.restore(); }
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 ColorWheel::drawWheelImage(const QSize &newSize) { int r = qMin(newSize.width(), newSize.height()); QStyleOption option; option.initFrom(this); QBrush backgroundBrush = option.palette.window(); mWheelImage = QImage(newSize, QImage::Format_ARGB32_Premultiplied); QPainter painter(&mWheelImage); painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(mWheelImage.rect(), backgroundBrush); QConicalGradient conicalGradient(0, 0, 0); for (int hue = 0; hue < 360; hue += 1) { conicalGradient.setColorAt(hue / 360.0, QColor::fromHsv(hue, 255, 255)); } qreal ir = r - mWheelThickness; /* outer circle */ painter.translate(width() / 2, height() / 2); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.drawEllipse(QPoint(0, 0), r / 2, r / 2); /* inner circle */ painter.setBrush(backgroundBrush); painter.drawEllipse(QPoint(0, 0), r / 2 - mWheelThickness, r / 2 - mWheelThickness); // Center of wheel qreal m1 = (mWheelPixmap.width() / 2) - (ir / qSqrt(2)); qreal m2 = (mWheelPixmap.height() / 2) - (ir / qSqrt(2)); // Calculate size of wheel width qreal wheelWidth = 2 * ir / qSqrt(2); // Calculate wheel region mWheelRect = QRectF(m1, m2, wheelWidth, wheelWidth).toAlignedRect(); }
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::drawWheelImage(const QSize &newSize) { int r = qMin(newSize.width(), newSize.height()); QStyleOption option; option.initFrom(this); QBrush backgroundBrush = option.palette.window(); m_wheelImage = QImage(newSize, QImage::Format_ARGB32_Premultiplied); //m_wheelImage.fill(background.color()); // Only in 4.8 QPainter painter(&m_wheelImage); painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(m_wheelImage.rect(), backgroundBrush); QConicalGradient conicalGradient(0, 0, 0); for (int hue = 0; hue < 360; hue +=1) { conicalGradient.setColorAt( hue / 360.0, QColor::fromHsv(hue, 255, 255)); } /* outer circle */ painter.translate(r / 2, r / 2); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.rotate( -90 ); painter.drawEllipse(QPoint(0, 0), r/2, r/2); /* inner circle */ painter.setBrush(backgroundBrush); painter.drawEllipse(QPoint(0, 0), r/2 - m_wheelWidth, r/2 - m_wheelWidth); //caculate wheel region m_wheelRegion = QRegion(0, 0, r, r, QRegion::Ellipse); }
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::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); const int r = 150; 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,r); QBrush brush(conicalGradient); painter.setPen(Qt::NoPen); painter.setBrush(brush); painter.drawEllipse(QPoint(0, 0), r, r); }
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); /* 1. 绘制线条 */ painter.drawLine(QPoint(0, 0), QPoint(100, 100)); /* 创建画笔 */ /* 画刷 线宽 画笔风格 画笔端点风格 画笔连接风格 */ QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin); //使用画笔 painter.setPen(pen); QRectF rectangle(70.0, 40.0, 80.0, 60.0); int startAngle = 30 * 16; /* 实际角度值 x 16*/ int spanAngle = 120 * 16; /* 2. 绘制圆弧 */ painter.drawArc(rectangle, startAngle, spanAngle); //重新设置画笔 pen.setWidth(1); pen.setStyle(Qt::SolidLine); painter.setPen(pen); /* 3. 绘制一个矩形 */ painter.drawRect(160, 20, 50, 40); //重新设置画笔 pen.setColor(QColor(255,0,0)); painter.setPen(pen); //创建画刷 QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern); //使用画刷 painter.setBrush(brush); /* 4. 绘制椭圆 */ painter.drawEllipse(220, 20, 60, 40); //设置纹理 brush.setTexture(QPixmap("../myDrawing/yafeilinux.png")); //重新使用画刷 painter.setBrush(brush); //定义四个点 static const QPointF points[4] = { QPointF(270.0, 80.0), QPointF(290.0, 10.0), QPointF(350.0, 30.0), QPointF(390.0, 70.0) }; /* 5. 使用四个点绘制多边形 */ painter.drawPolygon(points, 4); /* 6 使用画刷填充一个矩形区域 */ painter.fillRect(QRect(10, 100, 150, 20), QBrush(Qt::darkYellow)); //擦除一个矩形区域的内容 painter.eraseRect(QRect(50, 0, 50, 120)); /*线性渐变*/ QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190)); // 线性渐变 /*插入颜色*/ linearGradient.setColorAt(0, Qt::yellow); linearGradient.setColorAt(0.5, Qt::red); linearGradient.setColorAt(1, Qt::green); /*指定渐变区域以外的区域的扩散方式*/ linearGradient.setSpread(QGradient::RepeatSpread); // 重复渐变 // linearGradient.setSpread(QGradient::PadSpread); // 使用最近使用的颜色进行填充 默认值 // linearGradient.setSpread(QGradient::ReflectSpread); // 反射渐变 /*使用渐变作为画刷*/ painter.setBrush(linearGradient); /* 7 绘制线性渐变*/ painter.drawRect(10, 170, 90, 40); /* 8 辐射渐变*/ QRadialGradient radialGradient(QPointF(200, 190), 50, QPointF(275, 200)); radialGradient.setColorAt(0, QColor(255, 255, 100, 150)); radialGradient.setColorAt(1, QColor(0, 0, 0, 50)); painter.setBrush(radialGradient); painter.drawEllipse(QPointF(200, 190), 50, 50); /* 9 锥形渐变 */ QConicalGradient conicalGradient(QPointF(350, 190), 60); conicalGradient.setColorAt(0.2, Qt::cyan); conicalGradient.setColorAt(0.5, Qt::blue); conicalGradient.setColorAt(0.9, Qt::black); painter.setBrush(conicalGradient); painter.drawEllipse(QPointF(350, 190), 50, 50); /* 10 画笔使用线性渐变来绘制直线和文字 */ painter.setPen(QPen(linearGradient,2)); painter.drawLine(0, 280, 100, 280); painter.drawText(150, 280, tr("helloQt!")); }
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制线条 painter.drawLine(QPoint(0, 0), QPoint(100, 100)); //创建画笔 QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin); //使用画笔 painter.setPen(pen); QRectF rectangle(70.0, 40.0, 80.0, 60.0); int startAngle = 30 * 16; int spanAngle = 120 * 16; //绘制圆弧 painter.drawArc(rectangle, startAngle, spanAngle); //重新设置画笔 pen.setWidth(1); pen.setStyle(Qt::SolidLine); painter.setPen(pen); //绘制一个矩形 painter.drawRect(160, 20, 50, 40); //创建画刷 QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern); //使用画刷 painter.setBrush(brush); //绘制椭圆 painter.drawEllipse(220, 20, 50, 50); //设置纹理 brush.setTexture(QPixmap("../myDrawing/yafeilinux.png")); //重新使用画刷 painter.setBrush(brush); //定义四个点 static const QPointF points[4] = { QPointF(270.0, 80.0), QPointF(290.0, 10.0), QPointF(350.0, 30.0), QPointF(390.0, 70.0) }; //使用四个点绘制多边形 painter.drawPolygon(points, 4); //使用画刷填充一个矩形区域 painter.fillRect(QRect(10, 100, 150, 20), QBrush(Qt::darkYellow)); //擦除一个矩形区域的内容 painter.eraseRect(QRect(50, 0, 50, 120)); //线性渐变 QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190)); //插入颜色 linearGradient.setColorAt(0, Qt::yellow); linearGradient.setColorAt(0.5, Qt::red); linearGradient.setColorAt(1, Qt::green); //指定渐变区域以外的区域的扩散方式 linearGradient.setSpread(QGradient::RepeatSpread); //使用渐变作为画刷 painter.setBrush(linearGradient); painter.drawRect(10, 170, 90, 40); //辐射渐变 QRadialGradient radialGradient(QPointF(200, 190), 50, QPointF(275, 200)); radialGradient.setColorAt(0, QColor(255, 255, 100, 150)); radialGradient.setColorAt(1, QColor(0, 0, 0, 50)); painter.setBrush(radialGradient); painter.drawEllipse(QPointF(200, 190), 50, 50); //锥形渐变 QConicalGradient conicalGradient(QPointF(350, 190), 60); conicalGradient.setColorAt(0.2, Qt::cyan); conicalGradient.setColorAt(0.9, Qt::black); painter.setBrush(conicalGradient); painter.drawEllipse(QPointF(350, 190), 50, 50); //画笔使用线性渐变来绘制直线和文字 painter.setPen(QPen(linearGradient,2)); painter.drawLine(0, 280, 100, 280); painter.drawText(150, 280, tr("helloQt!")); }