QSerialPort给出错误“没有这样的文件或目录”

时间:2014-11-10 11:15:23

标签: ubuntu-14.04 qt5.3

在Ubuntu 14.04上用here使用Qt 5.3

的例子
 foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
    qDebug() << "Name        : " << info.portName();
    qDebug() << "Description : " << info.description();
    qDebug() << "Manufacturer: " << info.manufacturer();

    // Example use QSerialPort
    QSerialPort serial;
    serial.setPort(info);
    if (serial.open(QIODevice::ReadWrite)){
        serial.errorString();
        serial.close();
    }
}

输出:

Name "ttyACM2"
Description "E5-00"
Manufacturer "Nokia"
"No such File or Directory"

从代码来看,QSerialPortInfo正确检测到端口 但即使serial.open()返回true,errorString()也会返回&#34;没有这样的文件或目录&#34;。非常需要解决方案。

1 个答案:

答案 0 :(得分:2)

我知道这听起来很有趣,但我只是通过简单地确保端口名称是串行设备的绝对路径来解决这个问题。

在我分发使用'macdeployqt'创建的版本之前,这个问题对我们来说并不明显。使用Qt Creator进行的调试构建很好(我们分发的Windows构建工作也很好)。但是部署的构建将给出DeviceNotFound错误,错误文本“没有这样的文件或目录。

修复很简单,只需在调用QSerialPort :: open()之前准备端口名称:

#ifdef __APPLE__
// mac only
        comPort.name = "/dev/cu." + info.portName();
// end mac only
#else
        comPort.name = info.portName();
#endif

当然是特定于OS X('usbserial *'端口实际上是'/dev/cu.usbserial*'),但是如果您知道/ dev中的实际端口名称,类似的东西在Linux上也适用/。另外,我总是简单地使用QSerialPort :: setPortName而不是你试图做的setPort,所以你可能想尝试一下。