c++ - QTimer每秒执行一次方法

标签 c++ qt qt4

我正在学习 Qt,我正在阅读 Qt wiki 中有关线程、事件和 QObject 的内容,并遵循了关于如何在一段时间内处理某些工作的 wiki 建议,但它不适用于我的特定情况。这是我目前正在努力实现的一个简单示例。

class FooEvents : public FooWrapper {

    public virtual serverTime(..) { std::cout << "Server time event\n"; }
    public virtual connected(..) { std::cout << "Connected event\n"; }
}

class Foo : public QObject {

private:

    FooAPI *client;

public:


    Foo(FooEvents *ev, QObject *parent = 0) : client(new FooApi(ev)) { .. }

private slots:
    void processMessages() {

        if (state is IDLE)              

            reqFooAPiServerTime();

        select(client->fd()+1, ...);

        if (socket is ready for read)

            client.onReceive();

    }
public:
    void connect(...) {

        if (connection) {

            QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(processMessages()));
            timer.start(1000);  // I don't get the output from FooEvents

        }

    }

}

这很简单,但我认为它说明了我的情况。为什么这不起作用,还有什么其他替代方法可以处理这种情况?谢谢。

编辑:每秒调用 processMessages,但我没有从事件中获得任何输出

最佳答案

timer 在哪里声明和定义?

如果它在 Foo::connect() 本地,它将在它有机会触发之前被销毁。大概它只需要是 Foo 类的成员对象即可。

另外请记住,QObject 为计时器提供了它自己的简单接口(interface) - 只需覆盖 protected 虚拟 timerEvent() 函数并调用 QObject 的 startTimer() 开始获取那些计时器事件。在这种情况下,它们不会有一个插槽来接收计时器事件,它们只会在重写的 timerEvent() 函数处结束:

protected:
    void timerEvent(QTimerEvent *event) {
        processMessages();
    }

public:
    void connect( /* ... */ ) {

            // ... 

            startTimer(1000);
    }

关于c++ - QTimer每秒执行一次方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667689/

相关文章:

c++ - nvcc 和 BOOST 库的编译错误

qt - QMake:为 iOS App 指定自定义 Info.plist 文件

qt - 如何在qt中按下按钮时生成窗口(小部件)

c++ - 库链接错误 : undefined reference to _imp__

c++ - 在 Qt 5.2.1 上编写的 SSL 服务器的 SSL 握手失败

python - 如何用python-poppler-qt4显示PDF?

linux - Qt : Get the list of available audio devices in Linux

c++ - Tilemap 碰撞 SFML C++

c++ - 替换exe中的位图资源

c++ - 以未捕获的类型异常终止