如何用QT编写绘制贝塞尔曲线的涂鸦板?

我用三阶贝赛尔曲线函数cubicto()来绘图,直接在窗口上绘制的话,只能画一条,源代码如下:#include"widget.h"#include"ui_widget.h... 我用三阶贝赛尔曲线函数cubicto()来绘图,直接在窗口上绘制的话,只能画一条,源代码如下:
#include "widget.h"#include "ui_widget.h"#include<QPaintEvent>#include<QPainter>#include<QMouseEvent>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this);}Widget::~Widget(){ delete ui;}void Widget::paintEvent(QPaintEvent*){ QPainter painter(this); QPainterPath path; path.cubicTo(controlPoint,controlPoint1,endPoint); painter.drawPath(path);}void Widget::mousePressEvent(QMouseEvent *event){ if(event->button()==Qt::LeftButton) { controlPoint=event->pos(); }}void Widget::mouseMoveEvent(QMouseEvent *event){ if(event->buttons()&Qt::LeftButton) { controlPoint1=event->pos();update(); }}void Widget::mouseReleaseEvent(QMouseEvent *event){ if(event->button()==Qt::LeftButton) { endPoint=event->pos(); }}结果是这样,只能绘一条线:

如果先创建一个画布pixmap,再在画布上进行绘制。在上面拖动点时每一条线都会被记录下来,成这样的效果:

关键代码如下:
#include "widget.h"#include "ui_widget.h"#include<QPaintEvent>#include<QPainter>#include<QMouseEvent>#include<QPixmap>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); pix = QPixmap(600,500);}Widget::~Widget(){ delete ui;}void Widget::paintEvent(QPaintEvent*){ QPainter painter(&pix); QPainter pp(this); QPainterPath path; path.cubicTo(controlPoint,controlPoint1,endPoint); painter.drawPath(path); pp.drawPixmap(0,0,pix);}
展开
 我来答
cooke1234
2013-07-22 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3579万
展开全部
cubicTo函数是根据c1,c2,endpoint三个参数来划线的。
你的第一个例子中,每次paintEvent中都只画了一条线。
如果你想像windows那样,画面显示出n条线的话,那么你就要在paintEvent中画出n条线。
(把c1,c2,endpoint做为1组数据,放入到一个QList中,每次paintEvent处理时,从QList中取出n组数据,画出来n条线。当新产生1组数据时,把新数据追加到QList中的同时,再从QList头部删除1组数据,让QList始终不超过n组数据)
东莞大凡
2024-11-19 广告
作为东莞市大凡光学科技有限公司的工作人员,对于halcon标定板有所了解。Halcon标定板是高精度相机标定的关键工具,通常采用实心圆点或方格作为标志点。我们公司提供的halcon标定板,具有高精度、稳定可靠的特点,适用于机器视觉领域的各种... 点击进入详情页
本回答由东莞大凡提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式