Qt常用类 - QTime
1 开发环境
在介绍内容之前,先说明一下开发环境,如下图:
Qt版本:Qt5.3.2;
Qt开发工具:Qt Creater 3.2.1;
Qt构建工具:Desktop Qt 5.3 MinGW 32bit;
Qt开发平台:Windows 7 64bit。
2 QTime
QTime是Qt中用到的时间类,可以用于对自然时间的记录和计算,但是更多的是对于时间这个概念的记录和计算。首先,将QTime中的常用接口整理出来,分为初始化、获取、计算、流逝的时间、转换为字符串、比较共6类,这样方便学习和理解。
//初始化
QTime();
QTime(int h, int m, int s = 0, int ms = 0);
bool setHMS(int h, int m, int s, int ms = 0);
bool isNull() const;
bool isValid() const;
static QTime QTime::currentTime();
static QTime QTime::fromMSecsSinceStartOfDay(int msecs);
static QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
static QTime QTime::fromString(const QString &string, const QString &format);
static bool QTime::isValid(int h, int m, int s, int ms = 0);
//获取
int hour() const;
int minute() const;
int second() const;
int msec() const;
//计算
QTime addMSecs(int ms) const;
QTime addSecs(int s) const;
int msecsSinceStartOfDay() const;
int msecsTo(const QTime &t) const;
int secsTo(const QTime &t) const;
//流逝的时间,这是些很有用的接口,需要配合起来使用,可以计算程序耗时等时间
void start();
void restart();
int elapsed() const;
//转换字符串
QString toString(const QString &format) const;
QString toString(Qt::DateFormat format = Qt::TextDate) const;
//比较
bool operator!=(const QTime &t) const;
bool operator==(const QTime &t) const;
bool operator<(const QTime &t) const;
bool operator<=(const QTime &t) const;
bool operator>(const QTime &t) const;
bool operator>=(const QTime &t) const;
下面,是上述接口的使用例程。
#include <QDate>
#include <QThread>
#define qPrintableU8(_string) (QString(_string).toUtf8().constData())
#define TIME_STRING_FORMAT ("hh:mm:ss.zzz")
//QTime();
//QTime(int h, int m, int s = 0, int ms = 0);
//bool setHMS(int h, int m, int s, int ms = 0);
//bool isNull() const;
//bool isValid() const;
//static QTime QTime::currentTime();
//static QTime QTime::fromMSecsSinceStartOfDay(int msecs);
//static QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
//static QTime QTime::fromString(const QString &string, const QString &format);
//static bool QTime::isValid(int h, int m, int s, int ms = 0);
QTime timeNull;
qDebug("timeNull = %02d:%02d:%02d.%03d.", timeNull.hour(), timeNull.minute(), timeNull.second(), timeNull.msec());
qDebug("timeNull is null? %s.", timeNull.isNull() ? "yes" : "no");
qDebug("timeNull is valid? %s.", timeNull.isValid() ? "yes" : "no");
QTime time(20, 20, 20, 20);
qDebug("time = %s.", qPrintableU8(time.toString(TIME_STRING_FORMAT)));
qDebug("time is valid? %s.", QTime::isValid(time.hour(), time.minute(), time.second(), time.msec()) ? "yes" : "no");
QTime timeSystem = QTime::currentTime();
qDebug("timeSystem: %s.", qPrintableU8(timeSystem.toString(TIME_STRING_FORMAT)));
QTime timeFromMs = QTime::fromMSecsSinceStartOfDay(3600 * 1000);
qDebug("timeFromMs: %s.", qPrintableU8(timeFromMs.toString(TIME_STRING_FORMAT)));
QTime timeFs1 = QTime::fromString("20:21:22.023", Qt::ISODate);
qDebug("timeFs1: %s.", qPrintableU8(timeFs1.toString(TIME_STRING_FORMAT)));
QTime timeFs2 = QTime::fromString("22:23:24.025", TIME_STRING_FORMAT);
qDebug("timeFs2: %s.", qPrintableU8(timeFs2.toString(TIME_STRING_FORMAT)));
//int hour() const;
//int minute() const;
//int second() const;
//int msec() const;
//参考上面或下面代码中用到的地方
//...
//QTime addMSecs(int ms) const;
//QTime addSecs(int s) const;
//int msecsSinceStartOfDay() const;
//int msecsTo(const QTime &t) const;
//int secsTo(const QTime &t) const;
QTime timeBase(0, 0, 0, 0);
QTime timeAddMs = timeBase.addMSecs(3600 * 1000);
qDebug("timeAddMs = %s.", qPrintableU8(timeAddMs.toString(TIME_STRING_FORMAT)));
QTime timeAddS = timeBase.addSecs(3600);
qDebug("timeAddS = %s.", qPrintableU8(timeAddS.toString(TIME_STRING_FORMAT)));
qDebug("msecsSinceStartOfDay = %d.", timeAddS.msecsSinceStartOfDay());
qDebug("msecsTo = %d.", timeBase.msecsTo(timeAddS));
qDebug("secsTo = %d.", timeBase.secsTo(timeAddS));
//void start();
//void restart();
//int elapsed() const;
QTime timeElapsed;
timeElapsed.start();
QThread::msleep(100);
qDebug("timeElapsed(start): %dms.", timeElapsed.elapsed());
timeElapsed.restart();
QThread::msleep(200);
qDebug("timeElapsed(restart): %dms.", timeElapsed.elapsed());
//QString toString(const QString &format) const;
//QString toString(Qt::DateFormat format = Qt::TextDate) const;
QTime timeTs(0, 1, 2, 3);
qDebug("timeTs = %s", qPrintableU8(timeTs.toString("hh:mm:ss.zzz(AP)")));
qDebug("timeTs = %s", qPrintableU8(timeTs.toString(TIME_STRING_FORMAT)));
qDebug("timeTs = %s", qPrintableU8(timeTs.toString(Qt::ISODate)));
//bool operator!=(const QTime &t) const;
//bool operator==(const QTime &t) const;
//bool operator<(const QTime &t) const;
//bool operator<=(const QTime &t) const;
//bool operator>(const QTime &t) const;
//bool operator>=(const QTime &t) const;
QTime timeEarlier(0, 0, 0, 0), timeLater(1, 1, 1, 1);
qDebug("timeEarlier != timeLater? %s.", timeEarlier != timeLater ? "yes" : "no");
qDebug("timeEarlier == timeLater? %s.", timeEarlier == timeLater ? "yes" : "no");
qDebug("timeEarlier < timeLater? %s.", timeEarlier < timeLater ? "yes" : "no");
qDebug("timeEarlier <= timeLater? %s.", timeEarlier <= timeLater ? "yes" : "no");
qDebug("timeEarlier > timeLater? %s.", timeEarlier > timeLater ? "yes" : "no");
qDebug("timeEarlier >= timeLater? %s.", timeEarlier >= timeLater ? "yes" : "no");
在学习过程中,可以将上述代码放到一个按钮的响应函数中,以调试方式运行,就可以在Qt Creater中的应用程序输出窗口看到输出结果了。