QTimer不会发出超时信号

时间:2015-12-09 14:16:36

标签: c++ qt

我在QT中比较新。我试图找出QTimer的工作原理。我想在每次打字时打印一些东西。但我无法让它发挥作用。

testobj.cpp:

#include "testobj.h"
#include <QTimer>
#include <iostream>

using namespace std;

TestObj::TestObj()
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(onTick()));

    timer->start(100);

    cout << "Timer started" << endl;
}

void TestObj::onTick()
{
    cout << "test" << endl;
}

testobj.h:

#ifndef TESTOBJ
#define TESTOBJ

#include <QObject>

class TestObj: public QObject
{
    Q_OBJECT

public:
    TestObj();

public slots:
    void onTick();
};

#endif // TESTOBJ

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testobj.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    TestObj obj;
}

MainWindow::~MainWindow()
{
    delete ui;
}

我做错了什么?当我用isActive检查时它返回1(真)。但它根本不打印任何东西。

1 个答案:

答案 0 :(得分:3)

TestObj正在堆栈上实例化,而不是堆,因此当构造函数完成时它将超出范围,这是在代码执行到处理事件队列上的事件之前。

将成员变量添加到MainWindow标题: -

 TestObj* m_testObj;

在MainWindow构造函数中创建对象: -

m_testObj = new TestObj;

请记住删除析构函数中的对象

delete m_testObj;