QIODevice :: read(QSerialPort):设备未打开

时间:2018-11-26 16:54:06

标签: qt

我是Qt Creator的新手,我正试图从通过I2C进行通信的光传感器读取数据。我制作了一个类PortListener,该类应返回一次调用后在控制台上接收到的数据。

PortListener::PortListener(const QString &portName)
{
this->port = new QSerialPort();
port->setPortName(portName);
port->setBaudRate(QSerialPort::Baud9600);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::NoParity);
port->setStopBits(QSerialPort::OneStop); 
port->setFlowControl(QSerialPort::NoFlowControl); 
port->open(QIODevice::ReadWrite);
QByteArray readData = port->readAll();
qDebug() << "message:" << readData;
}

但是我唯一的消息是:

QIODevice::read (QSerialPort): device not open

message: ""

我不明白那是什么意思?

2 个答案:

答案 0 :(得分:1)

1。打开串口,然后设置参数。

PortListener::PortListener(const QString &portName)
{
   this->port = new QSerialPort();
   port->open(QIODevice::ReadWrite);
   port->setPortName(portName);
   port->setBaudRate(QSerialPort::Baud9600);
   port->setDataBits(QSerialPort::Data8);
   port->setParity(QSerialPort::NoParity);
   port->setStopBits(QSerialPort::OneStop); 
   port->setFlowControl(QSerialPort::NoFlowControl); 
}

2。将 readyRead 信号连接到插槽,插槽就是这样。

  void PortListener::readyReadSlot()
  {
      while (!port.atEnd()) {
          QByteArray data = port.readAll();
      }
  }

这很像 QextSerialPort ,以下是我的应用程序中的代码。

void SpClient::start()
{
    myComClient = new QextSerialPort(Setting::devCom);

    if(myComClient->open(QIODevice::ReadWrite))
    {
        qDebug() << "open " << Setting::devCom << "as client success";
    }
    myComClient->setBaudRate(BAUD9600);
    myComClient->setDataBits(DATA_8);
    myComClient->setParity(PAR_NONE);
    myComClient->setStopBits(STOP_1);
    myComClient->setFlowControl(FLOW_OFF);
    myComClient->setTimeout(50);
    ....
}

答案 1 :(得分:0)

我的猜测是您的代码无法打开串行端口,在Linux打开USB端口的情况下,我遇到了权限问题。您只需要执行chmod即可主要授予$ USER访问权限。