技术专栏
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();
}
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:2263次2020-09-08 15:02:41
-
浏览量:3730次2017-11-15 11:12:04
-
浏览量:1629次2018-01-29 19:45:09
-
浏览量:3141次2017-11-23 12:41:22
-
浏览量:2446次2022-12-08 23:43:55
-
浏览量:1858次2018-07-31 11:56:01
-
浏览量:1851次2018-01-11 11:40:23
-
浏览量:2460次2018-01-02 16:38:08
-
浏览量:1673次2018-11-20 22:07:26
-
浏览量:3621次2020-08-19 18:27:30
-
浏览量:1364次2019-10-11 14:49:42
-
浏览量:2659次2022-04-01 15:58:55
-
浏览量:3153次2020-08-22 16:09:02
-
浏览量:1999次2022-04-28 11:10:11
-
浏览量:2245次2020-08-20 11:19:28
-
浏览量:2873次2020-08-21 19:39:43
-
浏览量:2839次2020-08-23 20:59:44
-
浏览量:10096次2020-08-19 18:36:04
-
浏览量:3379次2020-08-18 20:09:59
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注