(Qt)Qtimer不起作用。我错过了哪些细节?

时间:2016-03-15 09:16:30

标签: c++ qt

我写了一个标题xx.h,有两个类,一个是Qt类“QClass”,另一个是泛型​​类“Normal”。并声明一个外部 Normal 变量。 普通有一个 QClass 成员 这是xx.h的内容:

#ifndef XX_H
#define XX_H

#include <QObject>
#include <QTimer>

class QClass : public QObject
{
    Q_OBJECT

public:
    QClass();
    ~QClass();

private:
    QTimer *t;
private slots:
    void func();
};

class Normal
{
    int i;

    QClass q;
};

extern Normal globalN;

#endif

我还编写了一个xx.cpp来实现xx.h

#include "xx.h"

QClass::QClass() : t(new QTimer)
{
    connect(t, SIGNAL(timeout()), this, SLOT(func()));
    t->start(1000);
}

QClass::~QClass()
{
    delete t;
}


void QClass::func()
{
    static int n = 0;
    ++n;
}

这是我的main.cpp,这里我定义了globalN。类为什么是我的Qt窗口类,它在 why.h 中声明。这个标题并不重要,所以我没有发布其内容。

#include "why.h"
#include "xx.h"
#include <QtWidgets/QApplication>

Normal globalN;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Why w;
    w.show();
    return a.exec();
}

我的想法是我将globalN放在全局范围内,所以当程序启动时,它构造globalN,然后计时器开始打勾。
  为了检查这些内容是否正常,我在QClass::func()设置了一个断点,以检查QTimer是否调用了func(),但它没有。{
  我检查了很长时间的代码,但我无法找到我的错误,请告诉我。谢谢!!

1 个答案:

答案 0 :(得分:8)

要启动计时器,您需要一个事件循环。要拥有一个事件循环,您需要有一个活跃的QApplication

此处,由于globalN是全局的,因此会在QApplication之前创建,因此您的计时器未启动。