gt.beta2
12th March 2009, 19:29
Hi
I was reading one example about threads(wish i know almost nothing about) and got carried away by the imagination:)
I have one dialog:
ubmsr.h
#ifndef UBMSR_H
#define UBMSR_H
#include <QtGui/QDialog>
#include "senderThread.h"
namespace Ui
{
class UbmsrClass;
}
class Ubmsr : public QDialog
{
Q_OBJECT
public:
Ubmsr(QWidget *parent = 0);
~Ubmsr();
private slots:
void startOrStopSenderThread();
private:
Ui::UbmsrClass *ui;
senderThread *sender;
};
#endif // UBMSR_H
ubmsr.cpp
#include "ubmsr.h"
#include "ui_ubmsr.h"
Ubmsr::Ubmsr(QWidget *parent)
: QDialog(parent), ui(new Ui::UbmsrClass)
{
ui->setupUi(this);
sender = new senderThread;
sender->setMessage("Hello!");
connect(ui->senderButton, SIGNAL(clicked()), this, SLOT(startOrStopSenderThread()));
}
Ubmsr::~Ubmsr()
{
delete ui;
}
void Ubmsr::startOrStopSenderThread(){
ui->senderButton->setText("asdasd");
if (sender->isRunning()) {
sender->stop();
ui->senderButton->setText(tr("Start Sender"));
ui->senderMsg->setEnabled(true);
ui->senderPort->setEnabled(true);
}else{
sender->start();
ui->senderButton->setText(tr("Stop Sender"));
ui->senderMsg->setEnabled(false);
ui->senderPort->setEnabled(false);
}
}
senderThread.h
#ifndef SENDERTHREAD_H
#define SENDERTHREAD_H
#include <QThread>
class senderThread : public QThread
{
Q_OBJECT
public:
senderThread();
void setMessage(const QString &message);
void stop();
protected:
void run();
private:
volatile bool senderStopped;
QString messageStr;
};
#endif
senderThread.cpp
#include <QtCore>
#include <iostream>
#include "senderThread.h"
using namespace std;
senderThread::senderThread()
{
senderStopped = false;
}
void senderThread::setMessage(const QString &message)
{
messageStr = message;
}
void senderThread::run()
{
while (!senderStopped)
cerr << qPrintable(messageStr);
senderStopped = false;
cerr << endl;}
void senderThread::stop()
{
senderStopped = true;
}
I can start and stop the thread and change the button label.
Is it possible to access the objects in the ui from a member function in the thread class?!
The final idea is to have 2 diferent threads sending and reading from a local network and showin all in the dialog i created.
I already managed the network issue ... the problem is putting this all togheter :o
How can i do it?
Thanks
I was reading one example about threads(wish i know almost nothing about) and got carried away by the imagination:)
I have one dialog:
ubmsr.h
#ifndef UBMSR_H
#define UBMSR_H
#include <QtGui/QDialog>
#include "senderThread.h"
namespace Ui
{
class UbmsrClass;
}
class Ubmsr : public QDialog
{
Q_OBJECT
public:
Ubmsr(QWidget *parent = 0);
~Ubmsr();
private slots:
void startOrStopSenderThread();
private:
Ui::UbmsrClass *ui;
senderThread *sender;
};
#endif // UBMSR_H
ubmsr.cpp
#include "ubmsr.h"
#include "ui_ubmsr.h"
Ubmsr::Ubmsr(QWidget *parent)
: QDialog(parent), ui(new Ui::UbmsrClass)
{
ui->setupUi(this);
sender = new senderThread;
sender->setMessage("Hello!");
connect(ui->senderButton, SIGNAL(clicked()), this, SLOT(startOrStopSenderThread()));
}
Ubmsr::~Ubmsr()
{
delete ui;
}
void Ubmsr::startOrStopSenderThread(){
ui->senderButton->setText("asdasd");
if (sender->isRunning()) {
sender->stop();
ui->senderButton->setText(tr("Start Sender"));
ui->senderMsg->setEnabled(true);
ui->senderPort->setEnabled(true);
}else{
sender->start();
ui->senderButton->setText(tr("Stop Sender"));
ui->senderMsg->setEnabled(false);
ui->senderPort->setEnabled(false);
}
}
senderThread.h
#ifndef SENDERTHREAD_H
#define SENDERTHREAD_H
#include <QThread>
class senderThread : public QThread
{
Q_OBJECT
public:
senderThread();
void setMessage(const QString &message);
void stop();
protected:
void run();
private:
volatile bool senderStopped;
QString messageStr;
};
#endif
senderThread.cpp
#include <QtCore>
#include <iostream>
#include "senderThread.h"
using namespace std;
senderThread::senderThread()
{
senderStopped = false;
}
void senderThread::setMessage(const QString &message)
{
messageStr = message;
}
void senderThread::run()
{
while (!senderStopped)
cerr << qPrintable(messageStr);
senderStopped = false;
cerr << endl;}
void senderThread::stop()
{
senderStopped = true;
}
I can start and stop the thread and change the button label.
Is it possible to access the objects in the ui from a member function in the thread class?!
The final idea is to have 2 diferent threads sending and reading from a local network and showin all in the dialog i created.
I already managed the network issue ... the problem is putting this all togheter :o
How can i do it?
Thanks