线程内使用emit(),内存泄漏十分严重,哪里出了问题?有源代码
一个十分简单的QT程序,线程启动后内存泄漏十分严重。QT新手请高手指点。谢谢!!复制代码//main.cpp#include "test_thread.h"#include <QtWidgets/QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Test_Thread w; w.show(); return a.exec();}复制代码//test_thread.h#ifndef TEST_THREAD_H#define TEST_THREAD_H#include <QtWidgets/QMainWindow>#include "ui_test_thread.h"#include <QtWidgets/QTextBrowser>#include <QtWidgets/QWidget>#include <QtWidgets/QLayout>#include<QtCore/QThread> #include "mythread.h"class Test_Thread : public QMainWindow{ Q_OBJECTpublic: Test_Thread(QWidget *parent = 0); ~Test_Thread(); Ui::Test_ThreadClass ui; QWidget *widget; QVBoxLayout *layout; QTextBrowser *textBrowser;private: void creat_Label(); QThread * t2 = new QThread(); MyObject * obj1 = new MyObject();};#endif // TEST_THREAD_H复制代码//test_thread.cpp#include "test_thread.h"#include <QtCore/QDebug>Test_Thread::Test_Thread(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); widget = new QWidget; layout = new QVBoxLayout; textBrowser = new QTextBrowser; layout->addWidget(textBrowser); widget->setLayout(layout); setCentralWidget(widget);//在主窗口上显示 //把对象移动到新线程 obj1->moveToThread(t2); t2->start(); connect(t2, SIGNAL(started()), obj1, SLOT(MyThread())); connect(obj1, SIGNAL(sendStr(QString)), textBrowser, SLOT(setText(QString)));}Test_Thread::~Test_Thread(){ delete layout; delete textBrowser; delete widget; delete t2; delete obj1;}复制代码//mythread.h#ifndef MYOBJECT_H#define MYOBJECT_H#include<QtCore/QObject>class MyObject :public QObject{ Q_OBJECTpublic: MyObject(); ~MyObject(); bool thread_run = true;public slots: void MyThread();private: signals: void sendStr(QString);};#endif // MYOBJECT_H复制代码//mythread.cpp#include "mythread.h"#include<QtCore/QThread> #include<QtCore/QDebug> MyObject::MyObject(){}MyObject::~MyObject(){}void MyObject::MyThread(){ while (thread_run) { QString str = "内存还在泄漏吗?\r\n"; //_sleep(100); emit sendStr(str); }}