[Qt-interest] Problems using postEvent ..plz help
Neeraj Jhawar
navderm at gmail.com
Sat Jan 10 17:54:01 CET 2009
SOME BUGS EXIST
Sorry
This code has some bugs
please dont see it.
I will try to post the new one asap
On 1/11/09, Neeraj Jhawar <navderm at gmail.com> wrote:
> 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.
>
> Please help me with the code...its been more than 2 days for this
> small idea to work:
>
> **************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 numb() const {return sz;}
>
> private:
> long sz;
> };
>
>
>
> class ProdThread : public QThread
> {
> public:
> ProdThread (int);
> void stop();
> 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.cpp**********************************
>
> #include <qlayout.h>
> #include <qpushbutton.h>
> #include <qlineedit.h>
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <math.h>
> #include <iostream.h>
>
>
> #include "postevent.h"
>
> static float temp_f;
> static char *temp_c;
>
>
> //the definitions of the thread
>
> ProdThread::ProdThread(int a) //the constructor
> {
> printval = 0;
> stopped = 0;
> finalval = a;
> }
>
> void ProdThread::stop()
> {
> stopped = 1;
> }
>
>
> void ProdThread::run()
> {
> // ProdEvent *pe = new ProdEvent(printval);
> stopped = false;
> while(!stopped)
> {
> while (printval < finalval)
> {
> usleep(1000);
> //send the printval via postEvent
> ProdEvent *pe = new ProdEvent(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 (ProdThread.running())
> {
> threadA.stop();
> threadAButton->setText(tr("Start Thread"));
> }
> else
> {
> threadA.start();
> threadBButton->setText(tr("Stop Thread"));
> }
>
> }
>
> void ThreadForm:: customEvent (QCustomEvent *e)
> {
> if (e->type() == 200)
> {
> ProdEvent* ce = (ProdEvent*)e;
> temp_f = ce->numb();
> 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
>
>
>
>
> On 1/10/09, Neeraj Jhawar <navderm at gmail.com> wrote:
>>>
>>> Then why are you using a separate thread at all? If your GUI is supposed
>>> to
>>> block while you fetch the data just do the data-fetching inside the GUI
>>> thread. That'll remove all needs for cross-thread-communication.
>>>
>>> Andreas
>>>
>>>
>> This is because when I try to update the GUI at this rate, all the buttons
>> hang. I just cant get them working smoothly enough. I am fetching the data
>> at 100 ms period ( or 1/100 ms freq). at this rate when I try to update
>> GUI
>> , the buttons like "STOP OPERATION" and "EXIT" and "SAVE TO FILE" are numb
>> and I just cant help them.
>>
>> Is there a way I could just do this without threads... i.e. take the
>> updates
>> from a GUI function and the buttons are still smooth enough??
>>
>>
>>
>> Neeraj Jhawar
>> Senior Undergraduate
>> Mechanical Engineering Department
>> Punjab Engineering College
>> Chandigarh.
>> India
>>
>
>
> --
> Neeraj Jhawar
> Senior Undergraduate
> Mechanical Engineering Department
> Punjab Engineering College
> Chandigarh.
> India
>
--
Neeraj Jhawar
Senior Undergraduate
Mechanical Engineering Department
Punjab Engineering College
Chandigarh.
India
More information about the Qt-interest-old
mailing list