I've got the code which crashes:

//MyThread.h file
#include <QtGui>
#include <iostream>


class MyThread : public QThread
{
Q_OBJECT

public:
MyThread ();
void run();

signals:
void Signal_AppendTextThread(const std::string &text);


protected slots:
void Slot_ShowMessage(const std::string &);

};


//MyThread.cpp file
#include "MyThread.h"


MyThread::MyThread(): QThread()
{
}

void MyThread:Slot_ShowMessage(const std::string &text)
{
}

void MyThread::run()
{

for(int i=1;i<1000;i++)
{
emit Signal_AppendTextThread("emitting thread signal ");
}

exec(); //do i really need this?
}


// MyMainWindow.h file

#include <QtGui/QMainWindow>
#include <QtGui/QApplication>
#include <QtGui/QLineEdit>
#include "MyThread.h"



class MyMainWindow: public QMainWindow
{
Q_OBJECT

public:
MyMainWindow( QWidget * pParent = 0, int argc = 0, char **argv = 0 );
~MyMainWindow();

MyThread m_pApplyAlgorithmThread;
QTextEdit *m_pTextEdit;

protected slots:
void Slot_ShowMessage(const std::string &);

};



//MyMainWindow.cpp file

#include "MyMainWindow.h"

MyMainWindow::MyMainWindow( QWidget * pParent, int argc, char **argv ) :
QMainWindow( pParent )
{

setWindowTitle( "Thread Test" );

m_pTextEdit = new QTextEdit(this);
m_pTextEdit->setReadOnly(true);
m_pTextEdit->setGeometry(0,0,200,200);


m_pApplyAlgorithmThread.start();

connect(&m_pApplyAlgorithmThread, SIGNAL(Signal_AppendTextThread(const std::string &)),
this, SLOT(Slot_ShowMessage(const std::string &)),Qt:irectConnection );


showMaximized();

for(int i=1;i<1000;i++)
{
m_pTextEdit->append("main");
m_pTextEdit->repaint();

//this->thread()->wait(100);
}
}

MyMainWindow::~MyMainWindow()
{
}

void MyMainWindow::Slot_ShowMessage(const std::string &text)
{
m_pTextEdit->append(text.c_str());
m_pTextEdit->repaint();
}


What am i doing wrong?