根据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);//信号槽 定时器时间到 启动 showtimeconnect(timer,&QTimer::timeout,this,&DigitalClock::showTime);timer->start(1000);//间隔1000ms(1s)showTime();//重置窗口大小resize(150,60);//冒号显示 flag = truem_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;
}
希望对大家有所帮助.