一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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  
复制代码

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 }  
复制代码

posted on   一杯清酒邀明月  阅读(1045)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示