效果图:

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画笔实现曲线的更多相关文章

  1. 学习Qt Charts - 实时曲线

    1.添加坐标轴 按照之前的一篇文章,先在工程中添加QChart.QChartView,代码如下: Dialog::Dialog(QWidget *parent) : QDialog(parent), ...

  2. Qt画笔实现波形区域图

    参考文章:https://blog.csdn.net/yuxing55555/article/details/79752978 效果图: void WareArea::paintEvent(QPain ...

  3. Qt画笔实现折线图

    参考:https://www.cnblogs.com/lsgxeva/p/7821550.html效果图: void BrokenLine::paintEvent(QPaintEvent *event ...

  4. Qt绘制动态曲线

    首先*.pro文件中加一句 QT += charts 然后 mainwindow.cpp文件如下: #include "mainwindow.h" #include "u ...

  5. Qt绘图

    Qt绘图的设置 QPainter::Antialiasing // 反锯齿 QPainter::TextAntialiasing // 文字反锯齿 QPainter::SmoothPixmapTran ...

  6. QT QcustomPlot的简单使用

    第一步.QcustomPlot是QT提供的一个第三方库,在使用前需要在QcustomPlot官网上进行下载. 第二步.把解压完的QcustomPlot压缩包中的qcustomplot.h和qcusto ...

  7. Qwt 编译 配置 使用

    QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类, ...

  8. HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...

  9. 【Qt编程】基于QWT的曲线绘制及图例显示操作

    在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...

随机推荐

  1. gym 101164 H.Pub crawl 凸包

    题目链接:http://codeforces.com/gym/101164/attachments 题意:对于已知的 n 个二维坐标点,要求按照某种特定的连线方式将尽可能多的点连接(任意相邻的 3 个 ...

  2. 三: 爬虫之selenium模块

    一 selenium模块 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. selenium最初是一个自动化测试工具, ...

  3. Oracle(order by)

    传统数据查询只会按照设置的主键排列.如果现在对制定的列进行排序的操作,那么就必须通过 ORDER BY 子句控制. 排序语法: SELECT [DISTINCT] * | 列名称 [AS] 列别名, ...

  4. Python3 操作Excel

    首先说明一下 在处理大文件时,openpyxl 的性能不如 xlrd,xlwt等.所以可以读取的时候使用xlrd,写的时候用openpyxl. 今天遇到一个使用场景:excel存放的是一条条用例,包含 ...

  5. 电脑用HDMI线分屏后,耳机或音箱没声音之完美解决!

    现今,由于工作需要,很多人都偏爱给自己的电脑进行分屏,两个显示器同时连接在一台电脑上,并进行“扩展这些功能显示”,从而大大提高了工作积极性和工作效率.本人在进行分屏后遇到了耳机没有声音的问题,并进行了 ...

  6. Interval 间隔问题

    2018-09-07 09:03:14 一.Merge Intervals 问题描述: 问题求解: public List<Interval> merge(List<Interval ...

  7. Linux awk命令详解 + 练习

    https://www.cnblogs.com/ftl1012/p/9250541.html 练习步骤: 1.我先是在root文件下面创建一个yan.txt文件,然后在文件中随便敲了几个字符串,由空格 ...

  8. (转)c# control.Invoke control.BeginInvoke

    在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...

  9. Sparksql的内置函数的使用以及案例

    开发环境:spark:2.2.0 工具:IDEA OS:Windows 数据文件: 001E8CB5AB11,ASUSTek,2018-07-12 14:00:57,2018-07-12 14:00: ...

  10. 停止学习框架(Stop Learning Frameworks)

    https://www.cnblogs.com/strick/p/10161733.html