BIllNo123
24th August 2010, 16:07
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::DirectConnection );
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?
//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::DirectConnection );
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?