1 QPainter::Antialiasing // 反锯齿 2 QPainter::TextAntialiasing // 文字反锯齿 3 QPainter::SmoothPixmapTransform // 采用平滑的Pixmap变换算法
设置
1 painter.setRenderHint(QPainter::Antialiasing, true);
绘图方法在上图已经很是清晰的展现了,方法参数也很简单,使用时一看便知。html
1)画刷风格算法
2)画笔风格函数
3)链接点风格this
4)顶端风格spa
建立一个自定义的Widget:.net
// widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPaintEvent> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); protected: // 重写基类的绘制方法 void paintEvent(QPaintEvent *); }; #endif // WIDGET_H
实现Widget:3d
// widget.cpp #include "widget.h" #include <QPainter> #include <QPoint> Widget::Widget(QWidget *parent) : QWidget(parent) {} Widget::~Widget() {} void Widget::paintEvent(QPaintEvent *event) { // TODO: 在这里进行绘制 }
程序入口Main:code
1 // main.cpp 2 3 #include "widget.h" 4 #include <QApplication> 5 6 int main(int argc, char *argv[]) 7 { 8 QApplication a(argc, argv); 9 Widget w; 10 w.show(); 11 12 return a.exec(); 13 }
好了,准备工做完成了。后面的绘制工做都会发生在 paintEvent 这个方法内。orm
1 void Widget::paintEvent(QPaintEvent *event) 2 { 3 Q_UNUSED(event) 4 5 // this 表示在Widget部件内部绘制 6 QPainter painter(this); 7 8 // 使用画笔,参数为:画刷,线宽,画笔风格,画笔端点,画笔链接风格 9 QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin); 10 painter.setPen(pen); 11 12 // 使用画笔画线 13 painter.drawLine(QPoint(0, 0), QPoint(100, 100)); 14 15 // 画矩形,参数:x,y,w,h 16 painter.drawRect(110, 110, 100, 80); 17 18 // 绘制椭圆(圆),参数:x,y,w,h 19 painter.drawEllipse(20, 20, 100, 80); 20 21 // 绘制圆弧 22 { 23 QRectF rect(110.0, 80.0, 100.0, 80.0); //x,y,w,h 24 int startAngle = 30 * 16; //值为,实际角度 * 16 25 int spanAngle = 120 * 16; 26 painter.drawArc(rect, startAngle, spanAngle); // 参数:rect表示弧线所在的矩形,startAngle起始角度,spanAngle跨越角度 27 } 28 29 // 绘制扇形 30 { 31 QRectF rect_top(120.0, 20.0, 100.0, 100.0); 32 int startAngle = 0 * 16; // 扇形起始角度 33 int spanAngle = 120 * 16; // 扇形覆盖范围(120度的) 34 painter.drawPie(rect_top, startAngle, spanAngle); 35 } 36 37 // 绘制多边形 38 { 39 QPolygon pts; 40 pts.setPoints(3, 250,20, 300,80, 280,130); //第一个参数表示3个点,后面是三个点坐标 41 painter.drawConvexPolygon(pts); 42 } 43 44 // 绘制路径 45 { 46 QPainterPath path; 47 path.addEllipse(400, 100, 80, 80);//添加一个圆 48 path.addRect(400, 130, 100, 100); //添加一个矩形 49 50 // 使用笔刷,设置颜色和填充模式 51 QBrush brush(QColor(0,0,255), Qt::Dense4Pattern); 52 painter.setBrush(brush); 53 path.setFillRule(Qt::WindingFill); // 非零弯曲规则;此外还有 Qt::OddEventFil 奇偶填充规则 54 55 painter.drawPath(path); 56 } 57 }
注释很详细了,就再也不进行说明,运行的效果以下图所示。htm
若是你以为这样一点一点的绘制太慢,写代码的效率过低,那么推荐你试试这个第三方控件:QCustomPlot。让咱们今后告别造轮子,专一业务需求自己。