Qt绘制贝塞尔曲线例程

转载 2016年08月29日 10:31:44

main.cpp

[cpp] view plain copy
  1. #include <QApplication>  
  2. #include "mywidget.h"  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.   
  8.     MyWidget w;  
  9.     w.resize(300, 300);  
  10.     w.show();  
  11.   
  12.     return a.exec();  
  13. }  

mywidget.h

[cpp] view plain copy
  1. #ifndef MYWIDGET_H  
  2. #define MYWIDGET_H  
  3.   
  4. #include <QWidget>  
  5. #include <QLabel>  
  6. #include <QMouseEvent>  
  7. #include <QLabel>  
  8.   
  9. class MyWidget : public QWidget  
  10. {  
  11.     Q_OBJECT  
  12. public:  
  13.     explicit MyWidget(QWidget *parent = 0);  
  14.   
  15.     QLabel *startLabel;  
  16.     QLabel *ctrlLabel1;  
  17.     QLabel *ctrlLabel2;  
  18.     QLabel *endLabel;  
  19.   
  20.     QLabel *ctrlLabel3;  
  21.     QLabel *ctrlLabel4;  
  22.     QLabel *endLabel2;  
  23.   
  24.     QWidget *selectedWidget;  
  25.   
  26. private:  
  27.     void paintEvent(QPaintEvent *event);  
  28.     void mousePressEvent(QMouseEvent *event);  
  29.     void mouseMoveEvent(QMouseEvent *event);  
  30.     void mouseReleaseEvent(QMouseEvent *event);  
  31.   
  32. };  
  33.   
  34. #endif // MYWIDGET_H  


mywidget.cpp

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include "mywidget.h"  
  2. #include <QPainter>  
  3. #include <QPainterPath>  
  4. #include <QDebug>  
  5.   
  6. MyWidget::MyWidget(QWidget *parent) :  
  7.     QWidget(parent)  
  8. {  
  9.   
  10.     startLabel=new QLabel(this);  
  11.     startLabel->resize(10, 10);  
  12.     startLabel->setStyleSheet("QLabel{background-color:red;}");  
  13.     startLabel->move(100, 110);  
  14.   
  15.     ctrlLabel1=new QLabel(this);  
  16.     ctrlLabel1->resize(10, 10);  
  17.     ctrlLabel1->setStyleSheet("QLabel{background-color:green;}");  
  18.     ctrlLabel1->move(120, 120);  
  19.   
  20.     ctrlLabel2=new QLabel(this);  
  21.     ctrlLabel2->resize(10, 10);  
  22.     ctrlLabel2->setStyleSheet("QLabel{background-color:blue;}");  
  23.     ctrlLabel2->move(140, 130);  
  24.   
  25.     endLabel=new QLabel(this);  
  26.     endLabel->resize(10, 10);  
  27.     endLabel->setStyleSheet("QLabel{background-color:black;}");  
  28.     endLabel->move(160, 140);  
  29.   
  30.     ctrlLabel3=new QLabel(this);  
  31.     ctrlLabel3->resize(10, 10);  
  32.     ctrlLabel3->setStyleSheet("QLabel{background-color:yellow;}");  
  33.     ctrlLabel3->move(180, 150);  
  34.   
  35.     ctrlLabel4=new QLabel(this);  
  36.     ctrlLabel4->resize(10, 10);  
  37.     ctrlLabel4->setStyleSheet("QLabel{background-color:cyan;}");  
  38.     ctrlLabel4->move(200, 160);  
  39.   
  40.     endLabel2=new QLabel(this);  
  41.     endLabel2->resize(10, 10);  
  42.     endLabel2->setStyleSheet("QLabel{background-color:#AAAAEE;}");  
  43.     endLabel2->move(220, 170);  
  44.   
  45.     selectedWidget=NULL;  
  46. }  
  47.   
  48.   
  49. void MyWidget::paintEvent(QPaintEvent *event)  
  50. {  
  51.     QPainter painter(this);  
  52.     painter.setPen(Qt::black);  
  53.     painter.drawLine(startLabel->pos(), ctrlLabel1->pos());  
  54.     painter.drawLine(ctrlLabel2->pos(), endLabel->pos());  
  55.     painter.drawLine(endLabel->pos(), ctrlLabel3->pos());  
  56.     painter.drawLine(ctrlLabel4->pos(), endLabel2->pos());  
  57.   
  58.     QPainterPath myPath;  
  59.     myPath.moveTo(startLabel->pos());  
  60.     myPath.cubicTo(ctrlLabel1->pos(), ctrlLabel2->pos(), endLabel->pos());  
  61.     myPath.cubicTo(ctrlLabel3->pos(), ctrlLabel4->pos(), endLabel2->pos());  
  62.     painter.setPen(Qt::red);  
  63.     painter.drawPath(myPath);  
  64. }  
  65.   
  66.   
  67. void MyWidget::mousePressEvent(QMouseEvent *event)  
  68. {  
  69.     QWidget *w=this->childAt(event->pos());  
  70.     if(w==NULL) return;  
  71.     if(w->inherits("QLabel")){  
  72.         selectedWidget=w;  
  73.     }  
  74. }  
  75.   
  76. void MyWidget::mouseReleaseEvent(QMouseEvent *event)  
  77. {  
  78.     selectedWidget=NULL;  
  79. }  
  80.   
  81. void MyWidget::mouseMoveEvent(QMouseEvent *event)  
  82. {  
  83.     if(selectedWidget!=NULL){  
  84.         selectedWidget->move(event->pos());  
  85.         this->update();  
  86.     }  
  87. }  

运行效果:


网址:http://blog.csdn.net/zgrjkflmkyc/article/details/45934829

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

B样条曲线拟合原理

1.与贝塞尔曲线对比 B样条曲线是在Bezier 曲线基础上发展起来的一类曲线,它克服了Bezier 曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。 2.二次B样条 2.1 ...

Qt绘制贝塞尔曲线例程

main.cpp #include #include "mywidget.h" int main(int argc, char *argv[]) { QApplication a(argc...

Qt 坐标轴 平滑曲线 贝塞尔曲线

ui头文件 /******************************************************************************** ** Form gen...

qt下bezier曲线的绘制(C++)

bezier曲线在编程中的难点在于求取曲线的系数,如果系数确定了那么就可以用微小的直线段画出曲线。bezier曲线的系数也就是bernstein系数,此系数的性质可以自行百度,我们在这里是利用bern...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

QT画图教程5:QT中QPainter的使用及矩形、圆形等常见图形的画法

#includeQApplication> #include QWidget>  #include QPainter>  class MyMainWindow:public QWidget {  pu...

Qt:在QML中自定义贝塞尔动画曲线

Qt在PropertyAnimation中,已经准备了很多常用的动画曲线,比如说Linear、Quad、Elastic等。这些基本已经可以覆盖我们大部分需求了,但是也不是所有的。 比如说,googl...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt绘制贝塞尔曲线例程
举报原因:
原因补充:

(最多只允许输入30个字)