【问题标题】:QSerialPortInfo::serialNumber() always returns an empty stringQSerialPortInfo::serialNumber() 总是返回一个空字符串
【发布时间】:2022-01-22 09:10:08
【问题描述】:

QSerialPortInfo::serialNumber() 总是返回一个空字符串,当它不可用时会发生这种情况。
我尝试连接不同的端口,一切似乎都很好,但无论我做什么,它都不会显示端口的序列号! 但是可以正确输出端口名称、制造商、产品ID。

我没有将任何设备连接到端口。
为什么序列号不可用?这可以通过某种方式解决吗?

我猜错误是在代码之外的某个地方,但这是我用来访问 serialNumber() 的插槽:

void PortBrowser::onPortChange()
{
int i;
if(comsCombo->currentIndex()>-1)
    i =comsCombo->currentIndex();
else
    i = 0;

QSerialPort currPort(comsList[i]);

bool opened =  currPort.open(QIODevice::ReadOnly);

const QString seriNum = comsList[i].serialNumber();

serNum->setText(seriNum);
manufact->setText(comsList[i].manufacturer());
QTextStream out(stdout);
out<<comsList[i].serialNumber();
currPort.close();
}

【问题讨论】:

  • 什么是comsList?一些QList&lt;QSerialPortInfo&gt;?如果是这样的话,我想我们需要更多关于你如何构建它的信息。无论如何,它可能只是根据文档不可用:“返回串行端口的序列号字符串,如果可用;否则返回一个空字符串。”可能有许多与系统相关的原因导致它不可用。这是什么平台,Windows?
  • @dabbler 它是 QSerialPortInfo 的 QList。是的,它适用于 Windows 10。如果有任何具体信息我应该提及,我很乐意这样做
  • 其他信息是否按预期输出? IE。 portName() 或者像你想象的那样,manufacturer()?
  • @dabbler 是的,制造商,如果我尝试输出它们,产品 ID 确实会按预期显示,端口名也是如此。
  • 对于列表中的每个端口,serialNumber 是否为空?您选择的端口是否插入了任何东西?

标签: c++ windows qt serial-port


【解决方案1】:

如果您查看相关源代码parseDeviceSerialNumber(),您会看到一些奇特的逻辑,其中 Qt 试图将序列号与某些设备标识字符串隔离开来。这就是您在 Windows 设备管理器中的详细信息中可能还会看到的字符串。

为什么序列号不可用?这可以通过某种方式解决吗?

您似乎有一个串行端口没有以 Qt 可以理解的格式提供其标识符。您可以尝试为 Qt 提供一个补丁,使其能够识别您的串行端口,或者您可以去购买 Qt 能够识别的串行端口。源代码中明确提到的一种芯片组是FTDI

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2016-12-16
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    相关资源
    最近更新 更多