技术专栏
Qt可悬浮工具按钮
Qt可悬浮工具按钮
仿制360悬浮按钮,可以在软件呢随意移动的悬浮按钮:
原理:
控件置顶,重写点击事件、移动事件,在鼠标点击移动事件中监控鼠标位置,鼠标点击移动时将控件移动到鼠标的位置。
代码实现:
#ifndef QToolButtonEx_H
#define QToolButtonEx_H
#include <QPushButton>
#include <QMouseEvent>
#include <QDebug>
class QToolButtonEx : public QPushButton
{
public:
QToolButtonEx(QWidget *parent = nullptr);
~QToolButtonEx();
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
// virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
signals:
// void moveSignals();
private:
QPoint m_start;//起始点
QPoint m_end;//结束点
bool m_leftButtonPressed;//鼠标左键按下标记
bool isMove = false;
};
#endif // QToolButtonEx_H
#include "QToolButton.h"
QToolButtonEx::QToolButtonEx(QWidget *parent):QPushButton(parent)
{
setWindowFlag(Qt::WindowStaysOnTopHint);
this->resize(200,200);
setStyleSheet("background:transparent");
setIcon(QIcon(":/new/prefix1/bird"));
setIconSize(QSize(200,200));
}
QToolButtonEx::~QToolButtonEx()
{
}
void QToolButtonEx::mousePressEvent(QMouseEvent *event)
{
// 鼠标左键按下事件
if (event->button() == Qt::LeftButton)
{
isMove = false;
// 记录鼠标左键状态
m_leftButtonPressed = true;
//记录鼠标在屏幕中的位置
m_start = event->globalPos();
// m_start = event->pos();
}
}
void QToolButtonEx::mouseReleaseEvent(QMouseEvent *event)
{
// 鼠标左键释放
if (event->button() == Qt::LeftButton)
{
if(!isMove)
emit released();
// 记录鼠标状态
m_leftButtonPressed = false;
isMove = false;
}
}
void QToolButtonEx::mouseMoveEvent(QMouseEvent *event)
{
// 持续按住才做对应事件
if(m_leftButtonPressed)
{
QSize size = this->size();//当前窗口大小
QSize parentSize = this->parentWidget()->size();//父窗口大小
QPoint curPos = geometry().topLeft() + (event->globalPos() - m_start);//移动后的位置
if(curPos.x() < 0)//left
curPos.setX(0);
if(curPos.y() < 0)//top
curPos.setY(0);
if( (curPos.x()+size.width()) > parentSize.width())//right
curPos.setX(parentSize.width() - size.width());
if( (curPos.y()+size.height()) > parentSize.height())//bottom
curPos.setY(parentSize.height() - size.height());
move(curPos);//移动
isMove = true;
// //将鼠标在屏幕中的位置替换为新的位置
m_start = event->globalPos();
}
}
- 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
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
<
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包

相关专栏
-
浏览量:2388次2020-09-08 15:02:41
-
浏览量:3910次2017-11-15 11:12:04
-
浏览量:1714次2018-01-29 19:45:09
-
浏览量:3343次2017-11-23 12:41:22
-
浏览量:2636次2022-12-08 23:43:55
-
浏览量:2545次2018-01-02 16:38:08
-
浏览量:1950次2018-07-31 11:56:01
-
浏览量:1953次2018-01-11 11:40:23
-
浏览量:1435次2019-10-11 14:49:42
-
浏览量:2708次2022-04-01 15:58:55
-
浏览量:1773次2018-11-20 22:07:26
-
浏览量:3861次2020-08-19 18:27:30
-
浏览量:2054次2022-04-28 11:10:11
-
浏览量:3371次2020-08-22 16:09:02
-
浏览量:3914次2020-08-21 19:40:26
-
浏览量:3037次2020-08-21 19:39:43
-
浏览量:2370次2020-08-20 11:19:28
-
浏览量:2973次2020-08-23 20:59:44
-
浏览量:10470次2020-08-19 18:36:04
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者

小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1

¥5

¥10

¥50

¥100

支付方式:

举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注