学习QT之QTime类

QTime类的currentTime()函数用于获取当前的系统时间;QTimetoString()函数用于将获取的时间转换为字符串类型。为了方便显示,toString()函数的参数需指定转换后时间的显示格式。

  1. H/h:小时(若使用H表示小时,则无论何时都以24小时制显示小时;若使用h表示小时,则当同时指定AM/PM时,采用12小时制显示小时,其他情况下仍采用24小时制进行显示)。
  2. m:分。
  3. s:秒。
  4. AP/A:显示AM或PM。
  5. Ap/a:显示am或pm。

可根据实际显示需求进行格式设置,例如:

hh:mm:ss A      22:30:09 PM
H:mm:s a        10:30:9  pm 

QTimetoString()函数也可以直接利用Qt::DateFormat作为参数指定时间显示的格式,如:Qt::TextDateQt::ISODateQt::LocalDate等。

下面通过一个电子时钟的例子来说明它的使用

一、运行结果

在这里插入图片描述

二、详细代码

digiclock.h

#ifndef DIGICLOCK_H
#define DIGICLOCK_H

#include <QLCDNumber>

class DigiClock : public QLCDNumber
{
    Q_OBJECT
public:
    DigiClock(QWidget *parent = 0);
    void mousePressEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);

public slots:
    void showTime();  //显示当前时间

private:
    QPoint dragPostion;  //保存鼠标点相对电子时钟窗体左上角的偏移值
    bool showColon;      //用于显示时间是否显示":"

};

#endif // DIGICLOCK_H

digiclock.cpp

#include "digiclock.h"
#include <QTime>
#include <QTimer>
#include <QMouseEvent>

DigiClock::DigiClock(QWidget *parent)
    : QLCDNumber(parent)
{
    /*设置时钟背景*/
    QPalette p = palette();
    p.setColor(QPalette::Window,Qt::white);
    setPalette(p);
    setWindowFlags(Qt::FramelessWindowHint); //设置窗体的标识,此处设置为没有面板边框和标题栏的窗体
    setWindowOpacity(0.5);  //设置窗体的透明度为0.5,即半透明
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
    timer->start(1000);  //以1000毫秒为周期启动定时器。
    showTime();
    resize(150,60);
    showColon = true;
}

void DigiClock::showTime()
{
    QTime time = QTime::currentTime();  //获取当前的系统时间
    QString text = time.toString("hh:mm");
    if(showColon)  //控制时分中间的两点闪显功能
    {
        text[2]=':';
        showColon = false;
    }
    else
    {
        text[2]=' ';
        showColon = true;
    }
    display(text);
}

void DigiClock::mousePressEvent(QMouseEvent *event)  //注(1)
{
    if(event->button() == Qt::LeftButton)
    {
        dragPostion = event->globalPos()-frameGeometry().topLeft();
        event->accept();
    }
    if(event->button() == Qt::RightButton)
    {
        close();
    }
}

void DigiClock::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)  //返回鼠标的状态
    {
        move(event->globalPos()-dragPostion);
        event->accept();
    }
}

注(1):通过执行鼠标按下事件响应函数mousePressEvent(QMouseEvent *)和鼠标移动事件响应函数mouseMoveEvent(QMouseEvent *)的重定义,可以实现鼠标在桌面上随意拖动电子时钟。

在鼠标按下响应函数mousePressEvent(QMouseEvent *)中,首先判断按下的键是否为鼠标左键。若按下的键是鼠标左键,则保存当前鼠标点所在的位置相对于窗体左上角的偏移值dragPostion;若按下的键是右键,则退出窗体。

在鼠标移动响应函数mouseMoveEvent(QMouseEvent *)中,首先判断当前鼠标状态。调用event->buttons()返回鼠标的状态,若为左侧按键,则调用QWidget的move()函数将窗体移动至鼠标当前点。由于move()函数的参数指的是窗体左上角的位置,所以要使用鼠标当前的位置减去相对窗体左上角的偏移值dragPostion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值