• Qt绘图的设置

 QPainter::Antialiasing // 反锯齿
QPainter::TextAntialiasing // 文字反锯齿
QPainter::SmoothPixmapTransform // 采用平滑的Pixmap变换算法
设置
 painter.setRenderHint(QPainter::Antialiasing, true);
  • 了解Qt绘图函数

绘图方法在上图已经非常清晰的展示了,方法参数也很简单,使用时一看便知。

  • Qt画笔风格

1)画刷风格

2)画笔风格

3)连接点风格

4)顶端风格

  • 实战前的准备

创建一个自定义的Widget:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QPaintEvent> class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = );
~Widget(); protected:
// 重写基类的绘制方法
void paintEvent(QPaintEvent *);
}; #endif // WIDGET_H

实现Widget:

// widget.cpp

#include "widget.h"
#include <QPainter>
#include <QPoint> Widget::Widget(QWidget *parent)
: QWidget(parent)
{} Widget::~Widget()
{} void Widget::paintEvent(QPaintEvent *event)
{
// TODO: 在这里进行绘制 }

程序入口Main:

 // main.cpp

 #include "widget.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show(); return a.exec();
}

好了,准备工作完成了。后面的绘制工作都会发生在 paintEvent 这个方法内。

  • 绘图实战

 void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event) // this 表示在Widget部件内部绘制
QPainter painter(this); // 使用画笔,参数为:画刷,线宽,画笔风格,画笔端点,画笔连接风格
QPen pen(Qt::green, , Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen); // 使用画笔画线
painter.drawLine(QPoint(, ), QPoint(, )); // 画矩形,参数:x,y,w,h
painter.drawRect(, , , ); // 绘制椭圆(圆),参数:x,y,w,h
painter.drawEllipse(, , , ); // 绘制圆弧
{
QRectF rect(110.0, 80.0, 100.0, 80.0); //x,y,w,h
int startAngle = * ; //值为,实际角度 * 16
int spanAngle = * ;
painter.drawArc(rect, startAngle, spanAngle); // 参数:rect表示弧线所在的矩形,startAngle起始角度,spanAngle跨越角度
} // 绘制扇形
{
QRectF rect_top(120.0, 20.0, 100.0, 100.0);
int startAngle = * ; // 扇形起始角度
int spanAngle = * ; // 扇形覆盖范围(120度的)
painter.drawPie(rect_top, startAngle, spanAngle);
} // 绘制多边形
{
QPolygon pts;
pts.setPoints(, ,, ,, ,); //第一个参数表示3个点,后面是三个点坐标
painter.drawConvexPolygon(pts);
} // 绘制路径
{
QPainterPath path;
path.addEllipse(, , , );//添加一个圆
path.addRect(, , , ); //添加一个矩形 // 使用笔刷,设置颜色和填充模式
QBrush brush(QColor(,,), Qt::Dense4Pattern);
painter.setBrush(brush);
path.setFillRule(Qt::WindingFill); // 非零弯曲规则;此外还有 Qt::OddEventFil 奇偶填充规则 painter.drawPath(path);
}
}

注释很详细了,就不再进行说明,运行的效果如下图所示。

  • 进阶:使用第三方控件,事半功倍

如果你觉得这样一点一点的绘制太慢,写代码的效率太低,那么推荐你试试这个第三方控件:QCustomPlot。让我们从此告别造轮子,专注业务需求本身。

QCustomPlot官网

QCustomPlot使用教程

QT5使用QCustomPlot绘制实时曲线

QCustomPlot使用分享

最新文章

  1. 关于robotframework,app,appium的xpath定位问题及常用方法
  2. Flexbox布局(转)
  3. Delphi 调用Dll的两种方式
  4. Git 升级与基础适用
  5. Android解析XML(PULL方式)
  6. JScrollPane与JPanel 滚动条 解决canvas的滚动条问题
  7. (hdu)1160 FatMouse&#39;s Speed
  8. acdream 1154 Lowbit Sum
  9. 浅谈Mybatis(三)
  10. mysql 时间
  11. 在Linux下的找不同-打补丁
  12. Java提高十七:TreeSet 深入分析
  13. Linux知识积累(6) 系统目录及其用途
  14. 安卓基础之通过Intent跳转Activity
  15. springboot2.0整合shiro出现ShiroDialect报错 找不到org/thymeleaf/processor/attr/AbstractTextChildModifierAttrPr
  16. vue实现商品累计效果
  17. Socket与TCP,UDP
  18. 使用python脚本批量删除阿里云oss中的mp4文件
  19. 使用ASP.NET+Jquery DataTables的服务器分页
  20. nyoj 某种序列

热门文章

  1. Order by排序
  2. 表格中的td内的div的文字内容禁止换行一行显示的css
  3. ABAP术语-XML
  4. 查询优化百万条数据量的MySQL表
  5. PL/SQL报错:ORA-28000:the account is locked
  6. OpenWrt-Git依赖报错
  7. C语言 编程练习22
  8. 笔记(assert 断言)
  9. scala (2) while 和变量
  10. 20155235 2016-2017-2 《Java程序设计》第十周学习总结