0004:Qt常用类 - QTime

博客介绍了Qt常用类QTime,先说明了开发环境,包括Qt 5.3.2版本、Qt Creater 3.2.1开发工具、Desktop Qt 5.3 MinGW 32bit构建工具和Windows 7 64bit开发平台。接着介绍QTime可用于时间记录和计算,整理其常用接口为6类,并给出使用例程及调试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中的应用程序输出窗口看到输出结果了。

<think>好的,我需要回答用户关于find命令中各种选项的用法和示例的问题。用户提到的选项包括-name、-user、-group、-print、-size、-inum、-type、-atime、-mtime、-ctime、-perm、-newer和-exec。我需要逐一解释每个选项,并给出相应的示例。同时,用户要求使用中文回答,并且所有行内数学表达式要用$...$格式,独立公式用$$...$$,不过在这个问题中可能不太需要数学公式,但要注意LaTeX语法的正确性。此外,还需要生成相关问题,并在引用部分末尾添加引用标识。 首先,我需要回忆每个选项的具体用法,并确保信息准确。例如,-name用于文件名匹配,支持通配符;-user根据文件所有者查找;-group根据用户组查找。对于每个选项,最好给出一个示例命令,这样用户更容易理解。 接下来是-size选项,用户提到了+1M这样的用法,引用中也有相关示例,比如引用[3]和[5]。需要注意单位的不同,如c表示字节,k表示千字节等。-inum用于查找inode号,这在处理硬链接时有用。-type用于指定文件类型,如f表示普通文件,d目录等。 时间相关的选项如-atime、-mtime、-ctime,需要解释n、+n、-n的区别。例如,-mtime +7表示修改时间超过7天的文件。-perm用于权限匹配,比如精确匹配或使用/-表示任何/所有权限位。-newer用于比较文件修改时间,引用中有提到-exec的用法,如引用[1]和[4],需要展示如何结合使用。 -exec选项需要特别注意其语法结构,以\;结束,并且使用{}来代表找到的文件名。例如,-exec rm {} \;。此外,xargs也是一个相关命令,如引用[4]中的例子。 在整理每个选项时,需要参考用户提供的引用内容,确保示例和说明与引用一致。例如,引用[3]中提到了-size +1M的例子,引用[5]中提到了-size +20c的使用。同时要注意引用标识的正确添加,例如在提到模糊搜索消耗资源时引用[2]。 最后,生成相关问题时要围绕find命令的更多用法、实际应用场景、性能优化等。比如如何组合多个条件,或者处理特殊字符的文件名。 需要检查是否有遗漏的选项,确保所有用户提到的选项都被覆盖,并且每个示例正确无误。同时保持回答结构清晰,分点解释,便于用户理解。</think>### find命令匹配表达式详解 #### 1. `-name` 文件名匹配 匹配文件名(支持通配符`*` `?` `[]`),区分大小写。 **示例**:查找当前目录下所有`.log`文件 ```bash find . -name "*.log" ``` #### 2. `-user` 按所有者查找 匹配属于指定用户的文件。 **示例**:查找用户`root`的文件 ```bash find /home -user root ``` #### 3. `-group` 按用户组查找 匹配属于指定用户组的文件。 **示例**:查找组`admin`的文件 ```bash find /var -group admin ``` #### 4. `-print` 输出结果(默认行为) 显示匹配文件的完整路径,默认启用[^2]。 **示例**:等价于`find . -name "*.txt"` ```bash find . -name "*.txt" -print ``` #### 5. `-size` 按文件大小筛选 单位支持:`c`(字节)、`k`(KB)、`M`(MB),`+n`表示大于,`-n`表示小于。 **示例**:查找大于1MB的文件 ```bash find /tmp -size +1M ``` #### 6. `-inum` 按inode编号查找 通过文件唯一inode编号定位文件,适用于硬链接管理[^5]。 **示例**:查找inode为`123456`的文件 ```bash find / -inum 123456 ``` #### 7. `-type` 按文件类型筛选 常用类型:`f`(普通文件)、`d`(目录)、`l`(符号链接)。 **示例**:查找所有目录 ```bash find . -type d ``` #### 8. `-atime/-mtime/-ctime` 按时间筛选 - `-atime n`:访问时间(天) - `-mtime n`:修改时间(天) - `-ctime n`:状态变更时间(天) **示例**:查找7天前修改的文件 ```bash find /var/log -mtime +7 ``` #### 9. `-perm` 按权限匹配 - `-perm 644`:精确匹配权限 - `-perm /u=r`:用户有读权限 **示例**:查找全局可写文件 ```bash find / -perm -o=w ``` #### 10. `-newer` 按文件新旧比较 匹配比指定文件更新的文件。 **示例**:查找比`reference.txt`新的文件 ```bash find . -newer reference.txt ``` #### 11. `-exec` 执行命令 对匹配文件执行指定命令,需以`\;`结尾,`{}`表示文件名[^1][^4]。 **示例**:删除所有临时文件 ```bash find /tmp -name "*.tmp" -exec rm {} \; ``` --- ### 组合应用示例 **查找用户`tom`的`.log`文件并压缩** ```bash find /home/tom -user tom -name "*.log" -exec gzip {} \; ``` **查找7天内修改的10MB以上日志文件** ```bash find /var/log -size +10M -mtime -7 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值