【发布时间】:2022-07-19 01:31:28
【问题描述】:
我只是想通过串口发送数据,但我收到段错误错误。
当我点击void productDetail::on_detailSaveBtn_clicked()) 时出现错误
下级停止了,因为它收到了来自操作系统的信号。
Signal name : SIGSEGV
Signal meaning : Segmentation fault
Debug 在这一行显示 arron
{ return write(data.constData(), data.size()); }
有人可以帮我解决一下吗?
这是我的代码。
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());
}
【问题讨论】:
-
serial1在发布的代码中看起来没有初始化。如果您认为已初始化,请发帖Minimal, Reproducible Example。 -
如果你没有 @MikeCAT 找到你的错误,请显示你有
serial1=new QSerialPort(this);的代码。 -
我没有`serial1=new QSerialPort(this);`我应该在哪里写这个? @drescherjm
-
在你的构造函数中
productDetail::productDetail(QWidget *parent) -
我应用了您所说的更改。该程序可以正常工作而不会崩溃。但是当我按下按钮时,串口并没有打开。一切似乎都是正确的。 @drescherjm
标签: c++ qt serial-port