电子时钟
这里主要是运用了QTimer和QLCDNumber类的用法
主要运用的方法和对象:
很多注释都在代码里了,有兴趣的同学可以瞧瞧
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;//钟表显示冒号“:”为true就显示,为false就不显式
};
#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);//计时器启动,间隔1秒钟就触发timeout
showTime();
//钟表框设置大小
resize(500,250);
m_showColon=true;
}
//鼠标按压事件
void DigitalClock::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton){
//m_dragPosition用来保证移动时鼠标和窗口左上角的位置不变
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 strTime=time.toString("hh:mm");
if(m_showColon){//冒号
strTime[2]=':';
}else{
strTime[2]=' ';
}
//将字符串显示到窗体
display(strTime);
//这样就会一闪一闪的(一会有“:”一会没有)
m_showColon=!m_showColon;
}
运行效果: