QTime
类的currentTime()
函数用于获取当前的系统时间;QTime
的toString()
函数用于将获取的时间转换为字符串类型。为了方便显示,toString()
函数的参数需指定转换后时间的显示格式。
- H/h:小时(若使用H表示小时,则无论何时都以24小时制显示小时;若使用h表示小时,则当同时指定AM/PM时,采用12小时制显示小时,其他情况下仍采用24小时制进行显示)。
- m:分。
- s:秒。
- AP/A:显示AM或PM。
- Ap/a:显示am或pm。
可根据实际显示需求进行格式设置,例如:
hh:mm:ss A 22:30:09 PM
H:mm:s a 10:30:9 pm
QTime
的toString()
函数也可以直接利用Qt::DateFormat
作为参数指定时间显示的格式,如:Qt::TextDate
、Qt::ISODate
、Qt::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
。