【问题标题】:QSerialPort gives error "no such file or directory"QSerialPort 给出错误“没有这样的文件或目录”
【发布时间】:2014-11-10 11:15:23
【问题描述】:

在带有 Qt 5.3 的 Ubuntu 14.04 上使用来自 here 的示例

 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() 也会返回“没有这样的文件或目录”。迫切需要一个解决方案。

【问题讨论】:

    标签: ubuntu-14.04 qt5.3


    【解决方案1】:

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

    在我分发使用“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,就像您尝试做的那样,所以您可能想尝试一下。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2019-09-08
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      相关资源
      最近更新 更多