qTime,检查计时器的值?

qTime,检查计时器的值?,qt,Qt,我有一个计时器,当时间等于某个时间时,即5秒、10秒、12秒。我想让它做点什么 不断检查计时器值以查看其是否与我的值匹配的最佳方法是什么?轮询QTime的时间是个坏主意。您有用于此的QTimer,它使用您平台的硬件计时器设施。将单发QTimer设置为5秒。将其timeout()信号连接到插槽,并在该插槽中为下一个间隔重新编程QTimer。这方面的一般概念是: int intervals[] = {5000, 10000, 12000}; // Alternative: // int interv

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


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

轮询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]);
}
int区间[]={5000,10000,12000};
//备选方案:
//整数区间[]={5000,5000,2000};
int currentInterval=0;
QTimer计时器;//确保你设置了一个单发计时器。
// ...
//槽
void handleTimeout()
{
++电流间隔;
//您可能应该在实际代码和查询大小()中使用QList。
如果(currentInterval>=sizeof(Interval)/sizeof(Interval[0])){
//我们结束了。
返回;
}
定时器启动(间隔[currentInterval]-间隔[currentInterval-1]);
//备选方案:
//定时器启动(间隔[currentInterval]);
}

轮询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]);
}
int区间[]={5000,10000,12000};
//备选方案:
//整数区间[]={5000,5000,2000};
int currentInterval=0;
QTimer计时器;//确保你设置了一个单发计时器。
// ...
//槽
void handleTimeout()
{
++电流间隔;
//您可能应该在实际代码和查询大小()中使用QList。
如果(currentInterval>=sizeof(Interval)/sizeof(Interval[0])){
//我们结束了。
返回;
}
定时器启动(间隔[currentInterval]-间隔[currentInterval-1]);
//备选方案:
//定时器启动(间隔[currentInterval]);
}

我认为您需要一个计时器5秒,一个计时器10秒,一个计时器12秒间隔。我认为您需要一个计时器5秒,一个计时器10秒,一个计时器12秒间隔。我认为您缺少对handleTimeout函数中的
timer.start()
的调用。请记住,默认情况下,QTimer不是很精确。由于间隔列表较长,此解决方案将越来越偏离实际时间。最好将QTime与QTimer结合使用。不要使用“当前间隔”来确定当前时间,而是使用QTime对象进行更精确的读取。我认为您缺少对handleTimeout函数中的
timer.start()
的调用。请记住,默认情况下,QTIMER不是非常精确的。由于间隔列表较长,此解决方案将越来越偏离实际时间。最好将QTime与QTimer结合使用。使用QTime对象进行更精确的读取,而不是使用“当前间隔”来确定当前时间。