Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ can';t从qt打开串行端口_C++_Qt - Fatal编程技术网

C++ can';t从qt打开串行端口

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

我正在做一个项目,在这个项目中,我必须从串行端口写入到读取。我已经编写了以下代码,但在else语句中收到消息“无法打开端口”。 当我使用hercules时,我可以打开“COM1”端口。但是我不知道为什么我不能通过我的QT程序打开这个端口

代码:

widget.h:

 #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();
  }