QPainter:
void myDialog2::paintEvent(QPaintEvent *event)
{
QPainter textPainter;
textPainter.begin(this);
textPainter.setFont(QFont("Times", 24, QFont::Bold));
textPainter.drawText(QPoint(50, 50), "测试");
textPainter.end();
QPainter linePainter;
linePainter.begin(this);
linePainter.drawLine(QPoint(50, 60), QPoint(100, 100));
linePainter.end();
QPen ellipsePen;;
ellipsePen.setColor(Qt::red);
ellipsePen.setStyle(Qt::DashDotLine);
QPainter ellipsePainter;
ellipsePainter.begin(this);
ellipsePainter.setPen(ellipsePen);
ellipsePainter.drawEllipse(QPoint(80, 200), 50, 20);
ellipsePainter.end();
QPainterPath rectPath;
rectPath.addRect(QRect(150, 20, 100, 50));
QPainter pathPainter;
pathPainter.begin(this);
pathPainter.setPen(QPen(Qt::red, 1, Qt::DashDotLine, Qt::FlatCap, Qt::MiterJoin));
pathPainter.setBrush(Qt::yellow);
pathPainter.drawPath(rectPath);
pathPainter.end();
QImage image;
image.load("D:/pic/lena.jpg");
QPainter imagePainter;
imagePainter.begin(this);
imagePainter.drawImage(QPoint(150, 150), image);
imagePainter.end();
}
QPainter和QPainterPath:
用途: 它是由一些图形如曲线、矩形、椭圆组成的对象。主要的用途是,能保存已经绘制好的图形。实现图形元素的构造和复用;图形状只需创建一次,然后调用QPainter::drawPath() 函数多次绘制。painterpath 可以加入闭合或不闭合的图形( 如:矩形、椭圆和曲线) 。QPainterPath 可用于填充,描边,clipping 。
使用方法: QPainterPath 一旦创建,直线和曲线都可以被添加入path ,通过lineTo(),arcTo(),cubicTo() 和 quadTo() 函数。currentPosition() 是最后一次绘制后的“结束点”(或初始点)。使用moveTo() 移动currentPosition() 而不会添加任何元素。moveTo() 隐含的开始一个新subpath ,并且闭合前一个。 一个path 添加到另一个path 用connectPath() 。它默认是从原点(0 ,0 )开始绘图,可以使用moveTo ()改变绘图的开始位置。
void QtGuiApplication1::paintEvent(QPaintEvent*) {
QPainterPath path;
path.lineTo(100, 200);
path.addEllipse(100, 200, 50, 50); // 向path 中添加图形
QPainter painter(this);
painter.setPen(Qt::yellow);
painter.setBrush(Qt::red);
painter.drawPath(path); // 绘制前面创建的path
// 生成可填充的轮廓
QPainterPathStroker stroker;
stroker.setCapStyle(Qt::RoundCap); // 端点风格
stroker.setJoinStyle(Qt::RoundJoin); // 连接样式
stroker.setDashPattern(Qt::DashLine); // 虚线图案
stroker.setWidth(10); // 宽度
// 生成一个新路径(可填充区域),表示原始路径 path 的轮廓
QPainterPath outlinePath = stroker.createStroke(path);
// 绘制轮廓时所用的画笔(轮廓外边框灰色部分)
QPen pen = painter.pen();
pen.setColor(QColor(0, 160, 230));
pen.setWidth(10);
// 用指定的画笔 pen 绘制 outlinePath
// painter.strokePath(outlinePath, pen);
painter.setPen(pen);
painter.drawPath(outlinePath);
// 用指定的画刷 brush 填充路径 outlinePath
painter.fillPath(outlinePath, QBrush(Qt::yellow));
}
image.png
渐变色:
https://blog.csdn.net/liang19890820/article/details/51181765
void QtGuiApplication1::paintEvent(QPaintEvent*) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); // 反走样
QLinearGradient linear(QPointF(80, 130), QPointF(180, 130));//线性填充,点指的是渐变范围,外围外左侧的用第一种色填充,右侧用第二种色填充
linear.setColorAt(0, Qt::black); //渐变色,只能设置俩个
linear.setColorAt(1, Qt::white);
linear.setSpread(QGradient::PadSpread); // 设置显示模式
painter.setPen(QPen(QColor(255, 255, 255), 2)); // 设置画笔颜色、宽度
painter.setBrush(linear);// 设置画刷填充
painter.drawRect(QRect(40, 40, 180, 180));
}
image.png
网友评论