ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT界面开发-(特效)整体可拖动的窗口

2020-01-10 15:54:50  阅读:357  来源: 互联网

标签:特效 QT 拖动 void QMouseEvent QWidget dragging event Qt


转载自邵发《C/C++系列教程》Qt界面开发 https://chuanke.baidu.com/v4509752-209060-1284517.html

只有顶部一小条可以拖动

 1 private:
 2     virtual void mouseMoveEvent(QMouseEvent * event);
 3     virtual void mousePressEvent(QMouseEvent * event);
 4     virtual void mouseReleaseEvent(QMouseEvent * event);
 5 
 6     bool m_dragging; // 是否正在拖动
 7     QPoint m_startPosition; // 拖动开始前的鼠标位置
 8     QPoint m_framePosition; // 窗体的原始位置
 9 
10 
11 //写到ui.setupUi(this);下面
12     m_dragging = false;
13 
14     // 不显示标题栏(亦无边框)
15     setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
16 
17 
18 
19 void TestAandB::mousePressEvent(QMouseEvent *event)
20 {
21     // 只响应左键
22     if (event->button() == Qt::LeftButton)
23     {
24         QRect titleRect = rect();
25         titleRect.setBottom(titleRect.top() + 80);
26 
27         if (titleRect.contains(event->pos()))
28         {
29             m_dragging = true;
30             m_startPosition = event->globalPos();
31             m_framePosition = frameGeometry().topLeft();
32         }
33     }
34 
35     QWidget::mousePressEvent(event);
36 }
37 
38 void TestAandB::mouseMoveEvent(QMouseEvent *event)
39 {
40     // 只响应左键
41     if (event->buttons() & Qt::LeftButton)
42     {
43         if (m_dragging)
44         {
45             // delta 相对偏移量, 
46             QPoint delta = event->globalPos() - m_startPosition;
47 
48             // 新位置:窗体原始位置  + 偏移量
49             move(m_framePosition + delta);
50         }
51     }
52 
53     QWidget::mouseMoveEvent(event);
54 }
55 
56 void TestAandB::mouseReleaseEvent(QMouseEvent * event)
57 {
58     m_dragging = false;
59     QWidget::mouseReleaseEvent(event);
60 }

全部可以拖动

 1 void QTXiDaoPanJieMian1::mousePressEvent(QMouseEvent *event)
 2 {
 3     // 只响应左键
 4     if (event->button() == Qt::LeftButton)
 5     {
 6         m_dragging = true;
 7         m_startPosition = event->globalPos();
 8         m_framePosition = frameGeometry().topLeft();
 9     }
10     QWidget::mousePressEvent(event);
11 }
12 
13 void QTXiDaoPanJieMian1::mouseMoveEvent(QMouseEvent *event)
14 {
15     // 只响应左键
16     if (event->buttons() & Qt::LeftButton)
17     {
18         if (m_dragging)
19         {
20             // delta 相对偏移量, 
21             QPoint delta = event->globalPos() - m_startPosition;
22 
23             // 新位置:窗体原始位置  + 偏移量
24             move(m_framePosition + delta);
25         }
26     }
27     QWidget::mouseMoveEvent(event);
28 }
29 
30 void QTXiDaoPanJieMian1::mouseReleaseEvent(QMouseEvent * event)
31 {
32     // 结束dragging
33     m_dragging = false;
34     QWidget::mouseReleaseEvent(event);
35 }

标签:特效,QT,拖动,void,QMouseEvent,QWidget,dragging,event,Qt
来源: https://www.cnblogs.com/nxopen2018/p/12176486.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有