简体   繁体   中英

QT C++ app crashing when send data with serial port

I am simply trying to send data via serial port, but I am getting segment fault error.

When I click void productDetail::on_detailSaveBtn_clicked()) I got thıs error

The inferior stopped because it received a signal from the operating system.

Signal name : SIGSEGV
Signal meaning : Segmentation fault

Debug shows arron on this line

 { return write(data.constData(), data.size()); }

Can someone help me please how can I solve it?

Here is my code.

productdetail.h


#ifndef PRODUCTDETAIL_H
#define PRODUCTDETAIL_H

#include <QDialog>
#include <QSerialPort>

namespace Ui {
class productDetail;
}

class productDetail : public QDialog
{
    Q_OBJECT

public:
    explicit productDetail(QWidget *parent = nullptr);
    ~productDetail();

private slots:
    void on_detailSaveBtn_clicked();

private:
    Ui::productDetail *ui;
    void connectSerial();
    QSerialPort *serial1;
};

#endif // PRODUCTDETAIL_H

productDetail.cpp

#include "productdetail.h"
#include "ui_productdetail.h"
#include <QDebug>
#include <QSerialPort>
#include <QMessageBox>
productDetail::productDetail(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::productDetail)
{
    ui->setupUi(this);
}

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


void productDetail::connectSerial(){




     //Set serial port name
     serial1->setPortName("COM3");
     //Open serial port
     serial1->open(QIODevice::WriteOnly);
     //set baud rate
     serial1->setBaudRate(9600);
     //Set the number of data bits
     serial1->setDataBits(QSerialPort::Data8);
      //Set parity
      serial1->setParity(QSerialPort::NoParity);
     //Set stop bit
     serial1->setStopBits(QSerialPort::OneStop);
     //set flow control
     serial1->setFlowControl(QSerialPort::NoFlowControl);



}
void productDetail::on_detailSaveBtn_clicked()
{


serial1->write(ui->productDesp->text().toLatin1());


 }

If you run your code through cgdb, lldb, or any debugger in any IDEs, it will tell you where it is crashing. Based on your further clarification, it seems that you are trying to call a method on an instance of QSerialPort which has not been constructed yet.

You need to create the serial port instance as per the examples I authored in QtSerialPort.

Also, if you make it a member of your class, you do not really need to construct and allocate this instance on the heap. You could just as well allocate this on the stack avoiding further complexities.

In other words, just remove the star from here and then the -> pointer member references.

QSerialPort serial1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM