预览效果: 左键点击不松手移动,右键点击关闭
第一步创建项目
右键点击项目添加新文件
选择C++类
该类继承自 QLCDNumber
clock.h代码实现:
#ifndef CLOCK_H
#define CLOCK_H
#include <QDialog>
class Clock : public QDialog
{
Q_OBJECT
public:
Clock(QWidget *parent = nullptr);
~Clock();
};
#endif // CLOCK_H
clock.cpp代码实现:
#include "clock.h"
Clock::Clock(QWidget *parent)
: QDialog(parent)
{
}
Clock::~Clock()
{
}
DigitalClock.h代码实现
#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H
#include <QLCDNumber>
class DigitalClock : public QLCDNumber
{
Q_OBJECT
public:
DigitalClock(QWidget *parent = 0);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private slots:
void showTime();
private:
QPoint m_dragPosition;
bool m_showColon;
};
#endif // DIGITALCLOCK_H
DigitalClock.cpp代码实现
#include "digitalclock.h"
#include <QTimer>
#include <QTime>
#include <QMouseEvent>
DigitalClock::DigitalClock(QWidget *parent):QLCDNumber(parent)
{
QPalette p = palette();//获取当前调色板
p.setColor(QPalette::Window,Qt::blue); //对窗体设置颜色
setPalette(p); //设置调色板
//无边框风格
setWindowFlags(Qt::FramelessWindowHint);
setWindowOpacity(0.5); //窗体透明度
QTimer *timer = new QTimer(this);
connect(timer,&QTimer::timeout,this,&DigitalClock::showTime);
timer->start(1000);
resize(150,60);
m_showColon = true;
}
void DigitalClock::mousePressEvent(QMouseEvent *event)
{
//左键
if(event->button() == Qt::LeftButton){
//鼠标相对屏幕左上角的位置 时钟窗体左上角位置
m_dragPosition = event->globalPos()-frameGeometry().topLeft();
event->accept();
}
//右键关闭
if(event->button() == Qt::RightButton){
close();
}
}
void DigitalClock::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton){
move(event->globalPos()-m_dragPosition);
event->accept();
}
}
void DigitalClock::showTime()
{
//当前时间
QTime time = QTime::currentTime();
QString strTimer = time.toString("hh:mm");
if(m_showColon){
strTimer[2] = ':';
}else{
strTimer[2] = ' ';
}
//显示
display(strTimer);
m_showColon = !m_showColon;
}
main.cpp代码实现
#include "clock.h"
#include <QApplication>
#include "digitalclock.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DigitalClock w;
w.show();
return a.exec();
}