C++ can';t从qt打开串行端口
我正在做一个项目,在这个项目中,我必须从串行端口写入到读取。我已经编写了以下代码,但在else语句中收到消息“无法打开端口”。 当我使用hercules时,我可以打开“COM1”端口。但是我不知道为什么我不能通过我的QT程序打开这个端口 代码: widget.h:C++ can';t从qt打开串行端口,c++,qt,C++,Qt,我正在做一个项目,在这个项目中,我必须从串行端口写入到读取。我已经编写了以下代码,但在else语句中收到消息“无法打开端口”。 当我使用hercules时,我可以打开“COM1”端口。但是我不知道为什么我不能通过我的QT程序打开这个端口 代码: widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QtSerialPort/QSerialPort> namespace
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSerialPort/QSerialPort>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
QSerialPort *serial;
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#ifndef小部件
#定义小部件
#包括
#包括
名称空间用户界面{
类控件;
}
类Widget:publicqwidget
{
Q_对象
公众:
显式小部件(QWidget*parent=nullptr);
~Widget();
QSerialPort*系列;
专用插槽:
单击按钮时无效();
私人:
Ui::Widget*Ui;
};
#endif//WIDGET\u H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QSerialPortInfo>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
serial = new QSerialPort(this);
serial->setPortName("COM1");
for(const auto &serialPortInfo : QSerialPortInfo::availablePorts())
{
qDebug() << "find serial port: " << serialPortInfo.portName() ;
}
serial->open(QIODevice::ReadWrite);
if(serial->open(QIODevice::ReadWrite))
{
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
while(1)
{
serial->write("ok");
qDebug() << " Reading " << serial->read(1);
serial->flush();
}
}
else
{
qDebug() << "can't open the port";
}
}
Widget::~Widget()
{
delete ui;
serial->close();
}
void Widget::on_pushButton_clicked()
{
qDebug() << "salam";
}
#包括“widget.h”
#包括“ui_widget.h”
#包括
#包括
#包括
Widget::Widget(QWidget*父项):
QWidget(母公司),
ui(新ui::小部件)
{
用户界面->设置用户界面(此);
串行=新的QSerialPort(本);
串行->设置端口名(“COM1”);
for(const auto&serialPortInfo:QSerialPortInfo::availableport())
{
qDebug()打开(QIODevice::ReadWrite))
{
串行->设置包速率(QSerialPort::Baud9600);
串行->设置数据位(QSerialPort::Data8);
串行->设置奇偶校验(QSerialPort::NoParity);
串行->设置停止位(QSerialPort::OneStop);
串行->设置流量控制(QSerialPort::NoFlowControl);
而(1)
{
串行->写入(“确定”);
qDebug()flush();
}
}
其他的
{
qDebug()关闭();
}
无效小部件::在按钮上单击
{
qDebug()你打开了两次,我想第二次应该是isOpen
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}