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(); } }<
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:Qt可悬浮工具按钮 https://www.yhzz.com.cn/a/14703.html