Qt绘图
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。让我们从此告别造轮子,专注业务需求本身。
Qt绘图的更多相关文章
- Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放.这个柜架也包 ...
- 简单的QT绘图程序(把全部的点都记录下来,然后在paintEvent里使用drawLine函数进行绘制,貌似效率很低。。。)
当初在学MFC时,最经典的入门实例就是绘图程序,其作用相当于Console Application 下的Hello World了吧. 如今入手QT,不免怀旧,于是也写了一个绘图程序,虽然简单,却也是入 ...
- 界面编程之QT绘图和绘图设备20180728
/*******************************************************************************************/ 一.绘图 整 ...
- Qt 绘图与动画系统
Qt 提供了内置的绘图系统以及独立的QtOpenGL模块提供对OpenGL的支持.Qt提供了基于状态机的QPainter系统和面向对象的Graphics View系统. QPainter 基于状态机的 ...
- Qt——绘图
1.涉及类 QPainter QPaintEngine QPaintDevice 作为绘图的使用者,只需要关注 QPainter 和 QPaintDevice 2.QPainter 使用 QPain ...
- Qt 绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...
- Qt绘图学习(1)
paintEvent()被调用的时机;1.当窗口第一次被show()的时候,Qt程序会自动产生一个绘图事件,调用绘图事件:2.重新调整窗口部件大小的时候,系统也会产生一个绘制事件.3.当窗口部件被其他 ...
- Qt绘图浅析与实例
1. Qt5位置相关函数 Q提供了很多关于获取窗体位置及显示区域大小的函数,如x().y()和pos().rect().size().geometry()等,统称为"位置相关函数" ...
- Qt: 绘图基础(非常简洁明了,全面)
QPainter 能绘制: point, line, rectangle, ellipse, arc, chord, polygon, pie segment, Bezier curve, QPixm ...
随机推荐
- 分布式一致性协议-2PC与3PC(二)
一.分布式一致性 一个事务需要跨多个分布式节点,又要保持事务的ACID特性,需要引入协调者来统一调度所有分布式节点的执行逻辑,被调度的节点称为参与者. 协调者负责调用参与者,并决定最终是否提交事务.基 ...
- C++练习 | 二分练习
Codeforces 371C : Hamburgers #include<bits/stdc++.h> using namespace std; char B='B',S='S',C=' ...
- Font Awesome图标字体
1.unicode unicode是字体在网页端最原始的应用方式,特点是: 兼容性最好,支持ie6+,及所有现代浏览器. 支持按字体的方式去动态调整图标大小,颜色等等. 但是因为是字体,所以不支持多色 ...
- 解决 SSH 不能输入中文的问题
有些应用的进程名称可能是中文,还有一些应用创建的目录可以也会是中文,在 SSH 上使用 debugserver 没有办法输入中文的进程名称,也没办法在 SSH 上操作中文的目录,网上试了一些方法,不过 ...
- 一条SQL语句的千回百转
SQL语言相信大家都不陌生,从本质上来说,它是一种结构化查询语言,是用来数据库之间的通信的编程语言.作为一名Java程序员,我们从Java角度来看,SQL语言相当于Java接口,而数据库是实现这个接口 ...
- 100-Days-Of-ML-Code 评注版(Day 3)
Day3_Multiple_Linear_Regression(多元线性回归) 本文引用自 Multiple_Linear_Regression, 对其中内容进行了评注与补充说明. 回归分析是一种预测 ...
- Zookeeper -- 命令
zkServer.sh start //启动zk进程 zkServer.sh stop //关闭zk进程 zkServer.sh status //查看zk状态 zkCli.sh //启动本地zk客户 ...
- Python学习 :多线程
多线程 什么是线程? - 能独立运行的基本单位——线程(Threads). - 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. - 一条线程指的是进程中一个单一 ...
- Ruby中区分运行来源的方法(转)
Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name == 'main':效果,其实Ruby中也有类似语法,需要的朋友可以参考下 ...
- 20155230 2016-2017-2 《Java程序设计》第四周学习总结
20155230 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 1.使用extends进行扩充继承时private也会被继承但是子类不能在其中直接存取. 2 ...