先获取鼠标开始的位置,左上角位置;
移动位置e->globalPos()函数获取
减去不变的tempPoint(差值)
源代码:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QLCDNumber(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(400,200);
//删除头部
this->setWindowFlag(Qt::FramelessWindowHint);
//设置背景色:1.获取调色板,
QPalette p = this->palette();
p.setColor(QPalette::Window,Qt::blue);
this->setPalette(p);
//设置透明度
this->setWindowOpacity(0.8);
//调用定时器启动函数
this->startTimer(1000);
}
Widget::~Widget()
{
delete ui;
}
//重写的定时器事件
void Widget::timerEvent(QTimerEvent *)
{
QTime sysTime = QTime::currentTime();
QString t = sysTime.toString("hh:mm");
if(ok==true)
{
t[2] = ':';
ok=false;
}else
{
t[2]=' ';
ok=true;
}
this->display(t);
}
void Widget::mousePressEvent(QMouseEvent *e)
{
startPoint = e->globalPos(); //获取鼠标点击的位置
tempPoint = startPoint-this->frameGeometry().topLeft();
}
void Widget::mouseMoveEvent(QMouseEvent *e)
{
//判断按键,左键移动,右键关闭
Qt::MouseButtons btn = e->buttons();
if(btn==Qt::LeftButton)
{
this->move(e->globalPos()-tempPoint);
}else if(btn==Qt::RightButton)
{
this->close();
}
}
头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLCDNumber>
#include <QTimerEvent>
#include <QTime>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QLCDNumber
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *);
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
private:
Ui::Widget *ui;
bool ok=true; //用来判断每秒调用不同函数
//起始点
QPoint startPoint;
QPoint tempPoint;
};
#endif // WIDGET_H
实现效果:闪烁时钟,可移动