关闭

Qt绘制贝塞尔曲线例程

559人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:200014次
    • 积分:2552
    • 等级:
    • 排名:第15004名
    • 原创:3篇
    • 转载:325篇
    • 译文:0篇
    • 评论:8条
    最新评论