PDA

View Full Version : مشکل با signal & slot



glassysmart
یک شنبه 30 آبان 1389, 16:43 عصر
سلام
به کد زیر توجه کنید

#include <QThread>
#include "serialio.h"
struct ConnectionInfo
{
QString comport_number;
int baudrate ;
int data ;
char parity ;
int stop;

};
class QTimer;
class Listener : public QThread
{
Q_OBJECT
public:
explicit Listener(QObject *parent = 0);

bool listenToPort(QString comport_number, int baudrate , int data , char parity ,int stop);


bool IsOpen(){return SerialIO::isOpen();}
void close(){SerialIO::close();}


protected:
void run();

signals:
void received(QString );
void counter(int);
private slots:
void read();

private:

ConnectionInfo _connectionInfo;

};


Listener::Listener(QObject *parent) :
QThread(parent)
{
}
void Listener::run()
{
exec();
}
void Listener::read()
{
static int lastStringLenght;
QString mes = SerialIO::read();

if (!mes.isNull() & !mes.isEmpty())
{
emit received(mes);
emit counter(SerialIO::getCounter());
}
else
{
if (lastStringLenght != 0)
emit endReceivedTextBlock();
}
lastStringLenght = mes.length();
}
bool Listener::listenToPort(QString comport_number, int baudrate , int data , char parity ,int stop)
{
_connectionInfo.comport_number =comport_number;
_connectionInfo.baudrate = baudrate;
_connectionInfo.data = data;
_connectionInfo.parity = parity;
_connectionInfo.stop = stop;
SerialIO::open( comport_number, baudrate , data , parity , stop);

if (SerialIO::isOpen())
{
_startListen(); // start timer to listen
start();
return true;
}
else
{
return false;
}

}

void Listener::_startListen()
{
QTimer *tm = new QTimer();
connect(tm,SIGNAL(timeout()),this,SLOT(read()));
tm->setInterval(30);
tm->start();
}


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
InitializeListener();
}

MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitializeListener()
{
listener = new Listener();
connect(listener,SIGNAL(received(QString)),ui->tableWidget_received,SLOT(showMessage(QString)));
}

من در این کد می توانم که signal ها را درون thread listener دریافت کنم اما خارج از این thread نمی تواند signal received را دریافت کنم در حقیقت متد زیر فراخونی نمی شود

ui->tableWidget_received->showMessage

حامد مصافی
یک شنبه 30 آبان 1389, 17:58 عصر
دوست عزيز شوال شما كمي گنگ است. لطفا كد هاي خارج از اين كلاس و اعلان كلاس را نيز اينجا قرار دهيد.

glassysmart
یک شنبه 30 آبان 1389, 22:53 عصر
سلام
اصلاح شد