当前位置: 代码迷 >> QT开发 >> QTimer 定时器失效的有关问题
  详细解决方案

QTimer 定时器失效的有关问题

热度:699   发布时间:2016-04-25 02:57:53.0
QTimer 定时器失效的问题
新学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被你干掉了。
------解决思路----------------------
引用:
嗯嗯,确实是我的C++的基础不够。
那第一点怎么办呢,让它在我让它关闭的时候才析构么。

把myclass 对象定义为MainWindow的成员变量