[Qt-interest] Problems using postEvent ..plz help

Neeraj Jhawar navderm at gmail.com
Sat Jan 10 18:03:13 CET 2009


I tried to implement the postEvent but this code is just not working.
Can any of you please help with the code...

I am trying to accomplish : Take a number from the thread via
postEvent and display is in the
textedit box every 1ms.

There are 3 files
1. main.cpp
2.postevent.h
3. postevent.cpp
****************************THE ERROR MESSAGE******************************

g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -DQT_SHARED
-DQT_THREAD_SUPPORT -I/usr/local/qt/mkspecs/default -I.
-I. -I/usr/local/qt/include -o postevent.o postevent.cpp
In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                 from postevent.cpp:8:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning:
#warning This file includes at least one deprecated or antiquated
header. Please consider using one of the 32 headers found in section
17.4.1.2 of the C++ standard. Examples include substituting the <X>
header for the <X.h> header for C++ includes, or <sstream> instead of
the deprecated header <strstream.h>. To disable this warning use
-Wno-deprecated.
postevent.cpp: In member function `virtual void ProdThread::run()':
postevent.cpp:42: parse error before `,' token
postevent.cpp:41: warning: unused variable `ProdEvent*pe'
make: *** [postevent.o] Error 1

*************************END OF ERROR MESSAGE*********************

(LINE 41 AND 42 HAVE BEEN SHOWN BY @@@ SIGN)

******************************POSTEVENT.H************************************
#ifndef POSTEVENT_H
	#define POSTEVENT_H
	
	#include <qdialog.h>
	#include <qthread.h>
	#include <qevent.h>
	
	class QLineEdit;
	class QPushButton;

/********************************************************************************/
		
	class ProdEvent : public QCustomEvent
	{
	public:
		ProdEvent(long s) : QCustomEvent (200), sz(s)
		{;}
		
		long s() const {return sz;}
		
	private:
		long sz;
	};

/********************************************************************************/
	
	class ProdThread : public QThread
	{
	public:
		ProdThread ();
		void stop(bool);
		void run();

	private:
		int printval;
		bool stopped;
		int finalval;
	};

/*******************************************************************************/
	
	class ThreadForm : public QDialog
	{
		Q_OBJECT
	public:
		ThreadForm (QWidget *parent = 0, const char *name = 0);
		void customEvent (QCustomEvent *e);
	public slots:
		void go();

	protected:

	private:
		ProdThread threadA;
		QPushButton *threadAButton;
		QPushButton *quitButton;
		QLineEdit *textedit;
	};

#endif
******************************END OF
POSTEVENT.H****************************************

*******************************POSTEVENT.H********************************************
#include <qlayout.h>
#include <qpushbutton.h>
#include <qlineedit.h>

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream.h>


#include "postevent.h"

float temp_f;
char *temp_c;


//the definitions of the thread

	ProdThread::ProdThread()			//the constructor
	{
		printval = 0;
		stopped = 0;
		finalval = 1000;
	}
	
	void ProdThread::stop(bool a)
	{
		stopped = a;
	}
	
	void ProdThread::run()
	{
		//		ProdEvent *pe = new ProdEvent(printval);
		stopped = false;
		while(!stopped)
		{
			while (printval < finalval)
			{
				usleep(1000);

@@@				ProdEvent *pe = new ProdEvent((long)printval);
@@@				QApplication::postEvent(ThreadForm, pe);
				printval++;
			}
		}
	}


//the definitions of the main class

ThreadForm::ThreadForm (QWidget *parent, const char *name) :
QDialog(parent, name)
{
	setCaption(tr("Threads"));
	
	threadAButton = new QPushButton(tr("Start Thread"), this);
	quitButton = new QPushButton (tr("Quit Program"), this);
	quitButton->setDefault(true);
	textedit = new QLineEdit(this);
		
	connect(threadAButton, SIGNAL(clicked()), this, SLOT(go()));
	connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
	
	QVBoxLayout *layout = new QVBoxLayout(this);
	layout->addWidget(textedit);
	layout->addWidget(threadAButton);
	layout->addWidget(quitButton);
}

void ThreadForm::go()
{
	if (threadA.running())
	{
		threadA.stop(1);
		threadAButton->setText(tr("Start Thread"));
	}
	else
	{
		threadA.stop(0);
		threadAButton->setText(tr("Stop Thread"));
	}

}

void ThreadForm:: customEvent (QCustomEvent *e)
{
	if (e->type() == 200)
	{
		ProdEvent* ce = (ProdEvent*)e;
		temp_f = ce->s();
		sprintf(temp_c,"%f",temp_f);
		textedit->setText(temp_c);
	}
}
*********************************end of
postevent.cpp******************************

*********************************main.cpp********************************************

#include <qapplication.h>

#include "postevent.h"

int main (int argc, char *argv[])
{
	QApplication app(argc, argv);
	ThreadForm *dialog = new ThreadForm;
	app.setMainWidget(dialog);
	dialog->show();
	return app.exec();
}
*******************************END OF MAIN.CPP*********************************

Please help with the same



More information about the Qt-interest-old mailing list