根据qt的<QLDNumber>做了一个qt液晶电子时钟.
结果
实时显示当前时间,左键可以拖动时钟在屏幕的位置,右键点击关闭显示.
实现过程
新建一个class文件,让这个文件的父类是QLCDNumber
相关功能变量定义和函数实现
.c文件代码
这里需要注意的一点是event->button是获取的最后一次点击,而event->buttons是检测是否按下,故计算相对位置是使用button,拖动时需要使用buttons
#include "digitalclock.h"
#include<QDebug>
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);
//信号槽 定时器时间到 启动 showtime
connect(timer,&QTimer::timeout,this,&DigitalClock::showTime);
timer->start(1000);//间隔1000ms(1s)
showTime();
//重置窗口大小
resize(150,60);
//冒号显示 flag = true
m_showColon = true;
}
//button 是检测最后一次点击
void DigitalClock::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)//鼠标左键{
{
m_dragPosition = event->globalPos()//鼠标相对于屏幕左上角偏移的位置
- frameGeometry().topLeft();//时钟窗体左上角位置
qDebug()<<m_dragPosition;
//接受
event->accept();
}
if(event->button() == Qt::RightButton){
close();
}
}
/*
buttons()方法返回的是一个整数,其中每一位代表一个按钮的状态。这样的设计允许同时检查多个按钮的状态。例如,你可以检查是否同时按下了左键和右键。
而button()方法通常用于获取最后一个点击的按钮。
所以在这里,为了检查鼠标左键是否被按下,我们使用buttons()方法,并通过位与运算符&来检查特定的位。
*/
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 strTime = time.toString("hh:mm");
if(m_showColon){
strTime[2] = ':';
}else{
strTime[2] = ' ';
}
display(strTime);
m_showColon = !m_showColon;
}
希望对大家有所帮助.