Qt实现电子时钟

本文实例为大家分享了Qt实现电子时钟的具体代码,供大家参考,具体内容如下

进一步认识Qt中的属性,我们现在再做一个小练习,去实现一个简易版电子时钟的效果。

效果展示:

新建项目:

我们创建了lcdclock2类,其实是没有用到的,实际上是添加新一个C++文件来实现电子钟。

添加C++文件:

代码:

clock.h

#ifndef CLOCK_H
#define CLOCK_H
 
#include <QDialog>
 
class clock : public QDialog
{
    Q_OBJECT
 
public:
    clock(QWidget *parent = 0);
    ~clock();
};
 
#endif // CLOCK_H

这个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头文件添加头文件QLCDNumber,在添加元对象系统,这个是必要的。接着需要重写鼠标点击事件mousePressEvent还有mouseMoveEvent鼠标移动事件。再写一个槽函数用来显示时间,就是将时间打印到对话框里面。这里有两个私有变量一个是m_dragPosition用来保存鼠标点击点到窗口左上方的位置距离。另外有一个变量是bool类型 m_showColon用来保存冒号出现的状态,达到频闪状态。

clock.cpp

#include "clock.h"
 
clock::clock(QWidget *parent)
    : QDialog(parent)
{
}
 
clock::~clock()
{
 
}

digitalclock.cpp

#include "digitalclock.h"
#include<QMouseEvent>
#include<QDebug>
#include<QTime>
#include<QTimer>
digitalclock::digitalclock(QWidget* parent):QLCDNumber(parent)
{
 
    //设置蓝色背景
    QPalette p=palette();//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);//设置计时器周期
 
    showTime();
    resize(200,100);
    m_showColon=true;
}
 
void digitalclock::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton){
        m_dragPosition=event->globalPos()-frameGeometry().topLeft();
        qDebug()<<"全局坐标:"<<event->globalPos();
        qDebug()<<"左上角坐标"<<frameGeometry().topLeft();
        event->accept();
    }else{
        close();//关闭窗口
 
    }
 
}
 
void digitalclock::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()==Qt::LeftButton){
 
        move(event->globalPos()-m_dragPosition);
        //移动电子时钟,move函数实际是根据窗口左上角为焦点来移动,如果不减去鼠标和左上角的偏移值,窗口会自动偏移
 
        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;//将冒号的显示状态设置为与之前想反,这样就达到频闪的样子
 
}

构造函数:

首先定义一个调色板对象,利用palette()函数返回一个调色板。在利用调色板的函数setColror(颜色类型,颜色);设置窗体风格函数用到setWIndowFlags();设置窗体透明度函数是setWIndowOpacity函数。紧接着再定义一个计时器QTimer.再将计时器与showTIme槽函数联系起来,每当计时器的时间到的时候就调用槽函数,之后再利用resize函数将窗口的大小重新设置。首先将冒号显示状态设置为真。

鼠标点击函数mousePreessEvent函数:

首先判断鼠标是否为左键点击,如果是那就将鼠标点击的点和窗口左上角点的距离计算出来,保存在m_dragposition。每次到函数结尾的时候一定要带上event.accept接受函数修改。

鼠标移动事件mouseMoveEvent函数:

首先判断鼠标左键是否被点击,因为通常的情况下,鼠标的移动是按左键拖动的,move函数实际是以窗口的左上方为焦点的,如果我们单纯传鼠标的全局坐标,那这样窗口的左上方会跳动到鼠标的点击点。这样就不好看,所以在传进坐标的时候,就是传鼠标点击的点减去窗口左上方相对于鼠标按下的偏移位置。

时间显示函数showTIme函数:

时间显示函数就是定义一个时间对象,利用QTime::Current函数获取当前的时间。在将时间转成指定的格式字符串,紧接着判断冒号的显示状态,将冒号根据状态设置有无。显示时间真正的函数是display函数,将时间字符串打印到窗口内。之后再将冒号状态取反,达到每个一秒频闪。

mian.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();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • QTimer与QTime实现电子时钟

    本文实例为大家分享了QTimer与QTime实现电子时钟的具体代码,供大家参考,具体内容如下 使用QLCDNumber控件进行显示 QLCDNumber控件默认只显示5个字符,可以使用setDigitCount(int size)进行设置显示个数 使用Display(QString str) 设置显示内容 该函数拥有多个重载,字符 整型 浮点型都可以作为参数 效果图: 代码:头文件 #include <QLCDNumber> class NumClock : public QLCDNumber

  • Qt实现电子时钟的示例代码

    目录 一.项目介绍 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 添加新文件 4.2 digiclock.h头文件 4.3 digiclock.cpp源文件 4.4 main.cpp源文件 五.效果演示 一.项目介绍 利用Qt实现显示与桌面上并可以随意拖拽至桌面任意位置的电子时钟案例. 二.项目基本配置 新建一个Qt案例,项目名称为“Clock”,基类选择“QDialog”,取消创建UI界面复选框的选中状态. 三.UI界面设计 无UI界面 四.主程序实现 4.1 添加新文件 添加新

  • QT5实现电子时钟

    本文实例为大家分享了QT5实现电子时钟的具体代码,供大家参考,具体内容如下 一.电子时钟的显示 效果如下: 电子时钟显示 二.新建工程 Widgets Application项目名位clock,基础类位QDialog,取消创建UI界面的勾选框,项目名右击添加新文件 在弹出的对话框中选择“C++ Class”,Base class基础类名“QLCDNumber”,class name命名为digiclock,点击完成. 三.编辑digiclock.h文件 #ifndef DIGICLOCK_H #

  • Python+Pyqt实现简单GUI电子时钟

    本文实例为大家分享了Python+Pyqt实现简单GUI电子时钟的具体代码,供大家参考,具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面,利用pyqt模块也很方便,代码如下: from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import QWidget,QApplication,QLCDNumber,QVBoxLayout,QMessageBox,QPushButton import sy

  • PyQt5使用QTimer实现电子时钟

    本文用 PyQt5 的QTimer类的两种方式实现电子时钟,供大家参考,具体内容如下 [效果图] [知识点] QTimer类提供了定时器信号/槽和单触发定时器. 它在内部使用定时器事件来提供更通用的定时器. QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽.当这段时间过去了,它将会发射timeout()信号. [实现] 1.定时器信号/槽方式 class MyTimer(QWidget): def __init__(self, pa

  • Qt实现电子时钟

    本文实例为大家分享了Qt实现电子时钟的具体代码,供大家参考,具体内容如下 进一步认识Qt中的属性,我们现在再做一个小练习,去实现一个简易版电子时钟的效果. 效果展示: 新建项目: 我们创建了lcdclock2类,其实是没有用到的,实际上是添加新一个C++文件来实现电子钟. 添加C++文件: 代码: clock.h #ifndef CLOCK_H #define CLOCK_H   #include <QDialog>   class clock : public QDialog {     Q

  • C语言实现电子时钟程序

    本文实例为大家分享了C语言实现电子时钟程序的具体代码,供大家参考,具体内容如下 Qt 里面运行 #include<windows.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> typedef struct { int x; int y; }Point; time_t now; struct tm *pt, t1, t2; int pri

  • QT实现简单时钟效果

    本文实例为大家分享了QT实现简单时钟效果的具体代码,供大家参考,具体内容如下 先上效果图: 预备知识: 一.钟表实现原理 设置定时器timer,每隔1000毫秒(即1s)发送timeout()信号到槽函数update(),重绘事件函数paintEvent(QPaintEventevent) 二.钟表的绘制方法 拆分钟表:表盘 数字 刻度线 指针 paintEvent(QPaintEventevent) 1.设置定时器,时间间隔为1000毫秒,并且将定时器时间与update函数关联为信号和槽,定时

  • Qt实现指针式时钟 Qt实现动态时钟

    本文实例为大家分享了Qt实现指针式时钟.动态时钟的具体代码,供大家参考,具体内容如下 先上图: 点击运行后首先是一个指针式时钟窗口,点击Digital Clock->可以跳转到数字时钟窗口,再点击Move Clock->可以还原为指针式时钟窗口 关于整个程序的讲解都在代码注释中给出,很详细~ 概要: 我设计两个窗口,一个主窗口一个子窗口,利用按钮+信号与槽机制,实现两个窗口的互相切换,其中主窗口用来显示指针时钟,完成三个基本要求: 1.正确显示系统时钟: 2.能准确定位时钟刻度和时分秒针的位置

  • JavaScript电子时钟倒计时

    本文实例讲解了JavaScript电子时钟倒计时的详细代码,分享给大家供大家参考,具体内容如下 JavaScript时间类 1.获取时分秒:          getHours()          getMinutes();          getSeconds(); 2.获取年月日:          getFullYear();          getMonth() + 1;//获取的月份需要+1:          getDate(); //日期          getDay();

  • java多线程编程制作电子时钟

    模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行. 1.定义一个Clock类.它继承Label类,并实现Runnable接口.这个类中有一个Thread类型的clocker域,以及start()和run()方法.在run()方法中,每隔一秒就把系统时间显示为label的文本. class Clock extends Label implements Runnable { //定义Thread类型的clocker域 public Thread clocker=null; publ

随机推荐