我写了一个标题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()
,但它没有。{
我检查了很长时间的代码,但我无法找到我的错误,请告诉我。谢谢!!
答案 0 :(得分:8)
要启动计时器,您需要一个事件循环。要拥有一个事件循环,您需要有一个活跃的QApplication
。
此处,由于globalN
是全局的,因此会在QApplication
之前创建,因此您的计时器未启动。