Qt画笔实现曲线
效果图:

void CurvePoint::paintEvent(QPaintEvent *event)
{
// 曲线上的点
static QList<QPointF> points = QList<QPointF>() << QPointF(10, 20) << QPointF(100, 100) << QPointF(200, 100)
<< QPointF(300, 100) << QPointF(330, 80) << QPointF(350, 70);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 2));
QPainterPath path(points[0]);
for (int i = 0; i < points.size() - 1; ++i)
{
// 贝赛尔曲线
// 控制点的 x 坐标为 sp 与 ep 的 x 坐标和的一半
// 第一个控制点 c1 的 y 坐标为起始点 sp 的 y 坐标
// 第二个控制点 c2 的 y 坐标为结束点 ep 的 y 坐标
QPointF sp = points[i];
QPointF ep = points[i+1];
QPointF c1 = QPointF((sp.x() + ep.x()) / 2, sp.y());
QPointF c2 = QPointF((sp.x() + ep.x()) / 2, ep.y());
path.cubicTo(c1, c2, ep);
}
// 绘制 path
// //移动默认(0,0)到(40,130)
// painter.translate(40, 130);
painter.drawPath(path);
// 绘制曲线上的点
painter.setBrush(Qt::gray);
int ellipse_size = 4;
for (int i = 0; i < points.size(); ++i) {
painter.drawEllipse(points[i], ellipse_size, ellipse_size);
QString text = QString::number(points[i].y());
QFontMetrics fm = painter.fontMetrics();
int height_font = fm.height();
int width_text = fm.width(text);
QPointF textPos(points[i].x()-(width_text/2), points[i].y()-(ellipse_size/2)-(height_font/2));
painter.drawText(textPos, text);
}
return QWidget::paintEvent(event);
}
Qt画笔实现曲线的更多相关文章
- 学习Qt Charts - 实时曲线
1.添加坐标轴 按照之前的一篇文章,先在工程中添加QChart.QChartView,代码如下: Dialog::Dialog(QWidget *parent) : QDialog(parent), ...
- Qt画笔实现波形区域图
参考文章:https://blog.csdn.net/yuxing55555/article/details/79752978 效果图: void WareArea::paintEvent(QPain ...
- Qt画笔实现折线图
参考:https://www.cnblogs.com/lsgxeva/p/7821550.html效果图: void BrokenLine::paintEvent(QPaintEvent *event ...
- Qt绘制动态曲线
首先*.pro文件中加一句 QT += charts 然后 mainwindow.cpp文件如下: #include "mainwindow.h" #include "u ...
- Qt绘图
Qt绘图的设置 QPainter::Antialiasing // 反锯齿 QPainter::TextAntialiasing // 文字反锯齿 QPainter::SmoothPixmapTran ...
- QT QcustomPlot的简单使用
第一步.QcustomPlot是QT提供的一个第三方库,在使用前需要在QcustomPlot官网上进行下载. 第二步.把解压完的QcustomPlot压缩包中的qcustomplot.h和qcusto ...
- Qwt 编译 配置 使用
QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类, ...
- HTML5版的String Avoider小游戏
HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...
- 【Qt编程】基于QWT的曲线绘制及图例显示操作
在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...
随机推荐
- React创建组件的三种方式及其区别
内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...
- Intellij Idea修改css文件即时更新生成效果
用来Idea也有一段时间了,觉得还是有很多地方没有用到,今天遇到了一个问题,百度了解决方法,正好在这里做一个小记录 主要问题是我在idea的项目里面修改了css文件,然后运行web文件,发现并没有做到 ...
- java用毫秒数做日期计算的一个踩坑记录
错误示例: Date today = new Date(); Date nextMonth = new Date(today.getTime() + 30* 1000*60*60*24); print ...
- Python day1_Base1笔记
1.helloworld print('helloword') 2.输入输出 a=input('Please input a value') print(a) 3.标识符 1.由字母数字下划线构成 2 ...
- Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0 解决方法: 要对切割字符进行转义\\
使用str.split("[",15)时,出现Exception in thread "main" java.util.regex.PatternSyntaxE ...
- 最全的SpringCloud视频教程
史上最全的SpringCloud视频教程 转自:https://blog.csdn.net/itmayeidu/article/details/79426589 史上最全的SpringCloud视频教 ...
- Android SDK无法更新的解决方法
一.说明: Android 更新sdk时访问google很慢,有时连接不上,可利用国内的某些镜像网站实现Android SDK在线更新. 二.解决方法: 在SDK Manager -> tool ...
- MyEclipse下自定义(支持html5的)JSP模板--JSP
需求:由于某些Mclipse版本发行的比较早,所以在有些版本(比如Mclipse2014,至于其他版本博主不知能不能创建html5格式的JSP页面)里创建JSP页面时html部分不是html5格式的. ...
- Jumpserver3.0部署(Centos6.x)
1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...
- anaconda安装tensorflow
1.下载anaconda python3.5版本,Windows不支持python3.6,linux和mac支持python2.7和python3.3+ 2.创建环境 conda create - ...