1

我正在使用 QT5.51。为什么 t1 无效?:

QTime t1 = QTime().addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

我希望得到“00:02:02”,但我得到了错误的“”。

4

2 回答 2

3

我想我明白了:

QTime t1(0,0,0,0);
t1 = t1.addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

= true "00:02:02"
于 2016-06-13T06:42:18.347 回答
2

新的默认构造QTime对象以无效状态开始。

QTime::QTime()

构造一个空时间对象。一个空时间可以是一个QTime(0, 0, 0, 0)(即午夜)对象,除了isNull()返回trueisValid()返回false

将秒数添加到无效时间会使其无效 - 毕竟,这是一个无效的时间点,而不是您似乎期望的午夜。这几乎是一种 NaN 类型的行为。

QTime QTime::addSecs(int s) const

...

如果此时间无效,则返回空时间。


要创建QTime处于有效状态的 a,您可以使用其他构造函数

QTime::QTime(int h, int m, int s = 0, int ms = 0)

用小时 h、分钟 m、秒 s 和毫秒 ms 构造时间。

所以午夜初始化QTime将是QTime(0, 0);因此,OP 代码应该这样调整:

QTime t1 = QTime(0, 0).addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");

您还可以使用其他几种辅助静态方法,具体取决于您需要如何初始化它。

于 2016-06-13T06:24:27.750 回答