• 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使用分享

Qt绘图的更多相关文章

  1. Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

    Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放.这个柜架也包 ...

  2. 简单的QT绘图程序(把全部的点都记录下来,然后在paintEvent里使用drawLine函数进行绘制,貌似效率很低。。。)

    当初在学MFC时,最经典的入门实例就是绘图程序,其作用相当于Console Application 下的Hello World了吧. 如今入手QT,不免怀旧,于是也写了一个绘图程序,虽然简单,却也是入 ...

  3. 界面编程之QT绘图和绘图设备20180728

    /*******************************************************************************************/ 一.绘图 整 ...

  4. Qt 绘图与动画系统

    Qt 提供了内置的绘图系统以及独立的QtOpenGL模块提供对OpenGL的支持.Qt提供了基于状态机的QPainter系统和面向对象的Graphics View系统. QPainter 基于状态机的 ...

  5. Qt——绘图

    1.涉及类 QPainter  QPaintEngine QPaintDevice 作为绘图的使用者,只需要关注 QPainter 和 QPaintDevice 2.QPainter 使用 QPain ...

  6. Qt 绘图(QBitmap,QPixmap,QImage,QPicture)

    QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...

  7. Qt绘图学习(1)

    paintEvent()被调用的时机;1.当窗口第一次被show()的时候,Qt程序会自动产生一个绘图事件,调用绘图事件:2.重新调整窗口部件大小的时候,系统也会产生一个绘制事件.3.当窗口部件被其他 ...

  8. Qt绘图浅析与实例

    1. Qt5位置相关函数 Q提供了很多关于获取窗体位置及显示区域大小的函数,如x().y()和pos().rect().size().geometry()等,统称为"位置相关函数" ...

  9. Qt: 绘图基础(非常简洁明了,全面)

    QPainter 能绘制: point, line, rectangle, ellipse, arc, chord, polygon, pie segment, Bezier curve, QPixm ...

随机推荐

  1. SQL Server 数据收缩

    1. 数据库的相关属性 在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大.数据库文件大小的增加有两种方式: 自动增长:在自动增长中可以设置每 ...

  2. 2017年秋招美团Java程序员开发,看我如何拿到offer

    本人是一名本科毕业非计算机专业的程序员,面了阿里,结果没过,最后面上了美团,热乎乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧.记性不是太好,有一些问题没能记住 ...

  3. 精准测试白皮书v3.0-2019最新版

    现代社会是建立在各种以计算机为基石的软件技术基础之上的.随着日新月异的需求变化,软件系统越来越复杂.很多人觉得软件开发才是重要环节,但实际上,无法对大型软件进行有效的质量把控,就无法真正构建与维护大型 ...

  4. EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

    原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using Sys ...

  5. spring定时任务注解@Scheduled的记录

    spring 定时任务@Scheduled 转自https://www.cnblogs.com/0201zcr/p/5995779.html 1.配置文件 <?xml version=" ...

  6. JSP声明和JSP指令

    JSP声明 JSP 声明用来定义程序中使用的实体,如变量.方法和类. 语法格式:<%!  变量/方法/类的声明  %> 例如: <%! String str="欢迎&quo ...

  7. transfrom、transition、animation区别

    transfrom transform是静态属性,非动画属性,和margin-left.margin-top类似. translate:平移,类似position:relative;translate ...

  8. C++的一些关键字用法

    const 这个关键字真是太常用了, 所以干脆总结一下. int const a = 8; //定义一个int常量a, 不能再给a赋值了 const int a = 8; //和上面一样 int co ...

  9. Python安装tesserocr遇到的各种问题及解决办法

    Tesseract的安装及配置 在Python爬虫过程中,难免遇到各种各样的验证码问题,最简单的就是​这种验证码了,那么在遇到验证码的时候该怎么办呢?我们就需要OCR技术了,OCR-即Optical ...

  10. django的Cookie-9

    设置Cookie 可以通过HttpResponse对象中的set_cookie方法来设置cookie. HttpResponse.set_cookie(cookie名字, value=cookie值, ...