Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt4:未解析的计时器事件_Qt_Events_Timer - Fatal编程技术网

Qt4:未解析的计时器事件

Qt4:未解析的计时器事件,qt,events,timer,Qt,Events,Timer,一个小样本文件main.cpp: #include <iostream> #include <QCoreApplication> class MyApp : public QCoreApplication { private: int m_idtimer; public: MyApp(int nargs, char* argc[]) : QCoreApplication(nargs, argc) { m_idtimer = st

一个小样本文件
main.cpp

#include <iostream>
#include <QCoreApplication>

class MyApp : public QCoreApplication
{
private:
    int m_idtimer;

public:
    MyApp(int nargs, char* argc[]) : QCoreApplication(nargs, argc)
    {
        m_idtimer = startTimer(3000); // 3 segs.
    }

protected:
    void timerEvent(QTimerEvent* e)
    {
        char c = '\0';

        std::cout << "timerEvent" << std::endl;
        std::cin >> c;

        if (c == 'q') {
            killTimer(m_idtimer);
            quit();
        }
    }
};

int main(int nargs, char* argc[])
{
    MyApp app(nargs, argc);

    return app.exec();
}
编制和执行:

$ make main
g++   -I/usr/include/qt4/QtCore  main.cpp  -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$
好的,然后,我的问题。我制作此示例的目的是测试计时器事件是否累积

当我执行
main
程序时,下一步发生:

  • 第一条
    timerEvent
    消息在3秒后显示,并且
    timerEvent()
    等待一个字符
  • 我中间按
    1
  • 3秒钟后,出现第二条
    timerEvent
    消息(如预期)
  • 我等待几秒钟(15秒或更长),然后按
    2
  • 立即显示第三条消息(累计一个计时器事件)
  • 我立即按
    3
  • 3秒钟后,第四条消息出现(不再累积计时器事件)
  • 我按
    q
    ,程序结束
问题:为什么不再累积计时器事件?这种行为是否取决于平台


PD:我的Qt版本是4.8,我的SO Ubuntu版本是13.04,我的内核(linux)版本是3.8.0-19-generic。运行的图形系统是Gnome 3。

您的15秒等待不会累积计时器事件,因为您的
timerEvent
代码块正在等待输入。在您输入输入之前,Qt无法返回其事件循环。当它返回到事件循环时,它会检查经过的时间,并注意到已经超过3秒,因此会触发计时器事件。十五秒已经过去这一事实无关紧要


这是预期的行为,不会(不应该)依赖于平台。

您的15秒等待不会累积计时器事件,因为您的
timerEvent
代码块正在等待输入。在您输入输入之前,Qt无法返回其事件循环。当它返回到事件循环时,它会检查经过的时间,并注意到已经超过3秒,因此会触发计时器事件。十五秒已经过去这一事实无关紧要

这是预期的行为,不会(不应该)依赖于平台

$ make main
g++   -I/usr/include/qt4/QtCore  main.cpp  -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$