Qt Serial не может использоваться из другого класса

Я пытаюсь читать и писать с последовательным портом.
Я создал класс с именем serial и связал его с readyRead на mainwindow.cpp.

QObject::connect(frm_serial->arduino,SIGNAL(readyRead()),frm_serial,SLOT(serialRead()));

Я читаю данные, когда я получил их, подключив сигнал в serial.cpp без каких-либо проблем.

Я пишу данные в serial.cpp тоже без проблем.

Но когда я попытался записать данные из другого класса «Программа неожиданно завершила».

Вот код метода подключения в другом классе

connect(this,SIGNAL(giden_seri(QString)),frm_serial,SLOT(serialWrite(QString)));

и строка отправляют код в другой класс

emit giden_seri(seri_mesaj);

Вот моя функция serialWrite в serial.cpp

void serial::serialWrite(QString gelen_seri)
{
arduino->write(gelen_seri.toStdString().c_str());
}

Кстати, я не могу не использовать никаких функций serialDevice, не только писать ….

Редактировать:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "serial.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

private:
Ui::MainWindow *ui;
manuel frm_manuel;
serial *frm_serial = new serial;
};

#endif // MAINWINDOW_H

serial.h

#ifndef SERIAL_H
#define SERIAL_H

#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
#include <QByteArray>
#include <QString>

class serial : public QObject
{
Q_OBJECT
public:
explicit serial(QObject *parent = 0);
QSerialPort *arduino;
const QString arduino_seri = "75533353637351110171";
QString arduino_port_name;
bool arduino_is_available;

QString serialBuffer;
QString bas="cagri",son="deniz";

signals:

public slots:
void ard_kontrol();

void serialRead();

void serialWrite(QString gelen_seri);

};

#endif // SERIAL_H

manuel.h (мой другой класс)

    #ifndef MANUEL_H
#define MANUEL_H

#include <QWidget>
#include <QString>

#include "serial.h"
#include <QDebug>
#include <QByteArray>
#include <QString>
#include <QtSerialPort/QSerialPort>

namespace Ui {
class manuel;
}

class manuel : public QWidget
{
Q_OBJECT

public:
explicit manuel(QWidget *parent = 0);
~manuel();

private slots:

void seri_gonder();

signals:
void giden_veri(QString s);
void giden_seri(QString veri);

private:
Ui::manuel *ui;
QString seri_mesaj="";
bool mesaj_hazir=0; // 0 yok , 1 Hazir
serial *frm_serial;

};

#endif // MANUEL_H

mainwindow.cpp

    #include "mainwindow.h"#include "ui_mainwindow.h"#include <QPixmap>
#include <QObject>bool auto_flag=0;

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

QObject::connect(frm_serial->arduino,SIGNAL(readyRead()),frm_serial,SLOT(serialRead()));

}

MainWindow::~MainWindow()
{
delete ui;
}

serial.cpp

    #include "serial.h"
serial::serial(QObject *parent) :
QObject(parent)
{
}void serial::ard_kontrol()
{
arduino_is_available=false;
arduino_port_name="";
serialBuffer="";
arduino = new QSerialPort;

foreach (const QSerialPortInfo &serialPortInfo,     QSerialPortInfo::availablePorts()) {
if(serialPortInfo.hasProductIdentifier() && serialPortInfo.hasVendorIdentifier())
{
if(serialPortInfo.serialNumber() == arduino_seri)
{
arduino_port_name= serialPortInfo.portName();
arduino_is_available=true;
}
}

}

if(arduino_is_available)
{
qDebug() << "Arduino var : " << arduino_port_name ;
arduino->setPortName(arduino_port_name);
arduino->open(QSerialPort::ReadWrite);
arduino->setBaudRate(QSerialPort::Baud9600);
arduino->setDataBits(QSerialPort::Data8);
arduino->setParity(QSerialPort::NoParity);
arduino->setStopBits(QSerialPort::OneStop);
arduino->setFlowControl(QSerialPort::NoFlowControl);
}

else
qDebug() << "Arduino yok";
}

void serial::serialRead()
{
serialBuffer.append(arduino->readAll());
if(serialBuffer.indexOf(bas) >=0 && serialBuffer.indexOf(son) >= 0)
{    serialBuffer=serialBuffer.mid(serialBuffer.indexOf(bas)+bas.length(),serialBuffer.indexOf(son)-(serialBuffer.indexOf(bas)+bas.length()));
qDebug() << serialBuffer;
serialBuffer="";
}
}

void serial::serialWrite(QString gelen_seri)
{
arduino->write(gelen_seri.toStdString().c_str());
}

manuel.cpp

#include "manuel.h"#include "ui_manuel.h"#include <QDebug>
#include <QPixmap>

manuel::manuel(QWidget *parent) :
QWidget(parent),
ui(new Ui::manuel)
{
ui->setupUi(this);
frm_serial=new serial();
connect(this,SIGNAL(giden_veri(QString)),frm_uyari,SLOT(gelen_veri(QString)));
connect(this,SIGNAL(giden_seri(QString)),frm_serial,SLOT(serialWrite(QString)));
}

manuel::~manuel()
{
delete ui;
}void manuel::seri_gonder()
{
if(mesaj_hazir)
{
emit giden_seri(seri_mesaj);
mesaj_hazir=0;
}
}

Github хранилище

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]