نمایش نتایج 1 تا 3 از 3

نام تاپیک: مشکل با signal & slot

  1. #1
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    تیر 1388
    پست
    134

    مشکل با signal & slot

    سلام
    به کد زیر توجه کنید
    #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
    آخرین ویرایش به وسیله glassysmart : یک شنبه 30 آبان 1389 در 19:20 عصر

  2. #2

    نقل قول: مشکل با signal & slot

    دوست عزيز شوال شما كمي گنگ است. لطفا كد هاي خارج از اين كلاس و اعلان كلاس را نيز اينجا قرار دهيد.

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    تیر 1388
    پست
    134

    نقل قول: مشکل با signal & slot

    سلام
    اصلاح شد

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •