我在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(真)。但它根本不打印任何东西。
答案 0 :(得分:3)
TestObj正在堆栈上实例化,而不是堆,因此当构造函数完成时它将超出范围,这是在代码执行到处理事件队列上的事件之前。
将成员变量添加到MainWindow标题: -
TestObj* m_testObj;
在MainWindow构造函数中创建对象: -
m_testObj = new TestObj;
请记住删除析构函数中的对象
delete m_testObj;