не могу открыть последовательный порт из qt

Я работаю над проектом, в котором мне нужно писать для чтения из последовательного порта. Я написал следующий код, но получаю сообщение, что не могу открыть порт в своем операторе else. Когда я использую Hercules, я могу открыть порт COM1. Но я не знаю, почему я не могу открыть этот порт через свою программу QT.

код:

виджет.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

виджет.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";
 }

основной.cpp:

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
  {
   QApplication a(argc, argv);
   Widget w;
   w.show();

    return a.exec();
  }

person Nanor    schedule 24.01.2021    source источник


Ответы (1)


Вы делаете open два раза, думаю, второй раз должен быть isOpen

person mugiseyebrows    schedule 24.01.2021