【问题标题】:qTime, checking value of timer?qTime,检查定时器的值?
【发布时间】:2012-11-19 13:54:03
【问题描述】:

我有一个计时器,当时间等于某个时间时,即。 5秒、10秒、12秒。我想让它做点什么。

不断检查计时器值以查看它是否与我的值匹配的最佳方法是什么?

【问题讨论】:

  • 我认为你需要 1 个 5 秒的计时器,1 个 10 秒的计时器,1 个 12 秒间隔的计时器。

标签: qt


【解决方案1】:

轮询 QTime 的时间是个坏主意。你有 QTimer ,它使用你平台的硬件定时器设施。将单次 QTimer 设置为 5 秒。将其 timeout() 信号连接到一个插槽,并在该插槽中为您的下一个间隔重新编程 QTimer。其一般概念是:

int intervals[] = {5000, 10000, 12000};
// Alternative:
// int intervals[] = {5000, 5000, 2000};
int currentInterval = 0;
QTimer timer; // Make sure you set this up a single-shot timer.

// ...

// slot
void handleTimeout()
{
    ++currentInterval;
    // You should probably use a QList<int> instead in your real code and query size().
    if (currentInterval >= sizeof(intervals) / sizeof(intervals[0])) {
        // We're done.
        return;
    }
    timer.start(intervals[currentInterval] - intervals[currentInterval - 1]);
    // Alternative:
    // timer.start(intervals[currentInterval]);
}

【讨论】:

  • 我认为您在 handleTimeout 函数中错过了对 timer.start() 的调用。
  • 请记住,默认情况下 QTimers 不是很精确。如果间隔列表很长,此解决方案将越来越远离实际时间。将 QTime 与 QTimer 结合使用可能会更好。不要使用“当前间隔”来确定当前时间,而是使用 QTime 对象来获得更精确的读数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2021-11-08
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多