新学Qt,所以遇到的问题不知道出在哪里。
在Mainwindow里使用QTimer就能正常使用,但是一旦在调用的类里使用QTimer,类的其他语句正常,QTimer就不起作用了,编译运行都可以,但是定时器就跟不存在一样。
希望各位大神指点迷津。
//////////////////////////////////////////////////////////////////////////
///////mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void de();
private:
Ui::MainWindow *ui;
int count;
};
class myclass : public QWidget{
Q_OBJECT
public:
myclass();
void dosomething();
QTimer *timer;
public slots:
void stry();
private:
int currentPhotoNum;
};
#endif // MAINWINDOW_H
///////////////////////////////////////////////////////////
//////////mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// QTimer *ti=new QTimer(this);
// ti->setInterval(1000);
// connect(ti,SIGNAL(timeout()),this,SLOT(de()));
// ti->start();
// count=0;
myclass a;
a.dosomething();
}
void myclass::stry(){
qDebug()<<currentPhotoNum<<endl;
currentPhotoNum++;
}
myclass::myclass(){
timer=new QTimer();
QObject::connect(timer,SIGNAL(timeout()),this,SLOT(stry()));
timer->start(1000);
}
void myclass::dosomething(){
qDebug()<<"test test"<<endl;
// QTimer *ti=new QTimer(this);
// connect(ti,SIGNAL(timeout()),this,SLOT(stry()));
// ti->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::de(){
qDebug()<<count<<endl;
count++;
}
------解决思路----------------------
C++基础不过关导致的
1. 你的 myclass 对象 是在MainWindow构造函数内创建的局部变量。意味着它还没有机会响应信号就被你干掉了。
2. 你的 myclass构造函数内 new 出来的 QTimer 你没有 delete。意味着存在内存泄漏,也就说你的QTimer一直在工作,尽管你的myclass被你干掉了。
------解决思路----------------------
把myclass 对象定义为MainWindow的成员变量