繁体   English   中英

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

[英](Qt) Qtimer doesn't work. What details have I missed?

我写了一个标题xx.h,有两个类,一个是Qt类“QClass” ,另一个是泛型​​类“Normal” 并声明一个外部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() ,但它没有。
我检查了很长时间的代码,但我无法找到我的错误,请告诉我。 谢谢!!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM