Qt 绘制贝塞尔曲线例程
Qt 绘制 例程 曲线 贝塞尔
2023-09-14 09:05:11 时间
main.cpp
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
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
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
mywidget.cpp
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 }
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- Qt音视频开发17-vlc内核回调拿图片进行绘制
- Qt编写的项目作品19-图片及视频TCP/UDP网络传输
- Qt编写安防视频监控系统36-onvif连续移动
- Qt编写地图综合应用46-设备点位(添加、删除、清空、重置)
- Qt图形视图框架简介
- Qt如何实现绘制网格背景
- Qt QStringLiteral
- Qt 通过重写QGraphicItem实现绘制、拖动、旋转、缩放椭圆
- QT多线程实战_Qt多线程开发项目
- Qt使用QAudioInput、QAudioOutput实现局域网的音频通话
- Qt 给窗口绘制阴影
- Qt之控件绘制圆角(可以实现任意角度为圆角)
- Qt 访问网络
- Qt如何绘制带小三角的消息框
- Qt访问注册表并调用子进程
- 简单QT应用了可实现手动布局QT应用
- Qt音视频开发39-海康sdk回调拿到数据GPU绘制的实现