'operator==' 不匹配(操作数类型为 QSerialPortInfo 和 const QSerialPortInfo)

no match for 'operator==' (operand types are QSerialPortInfo and const QSerialPortInfo)

以下代码是 QThread 的子类的一部分,我试图在其中发现任何新连接的串行端口。

void PortEnumerationThread::run ()
{
  QList<QSerialPortInfo> port_list, discovered_ports;

  discovered_ports = QSerialPortInfo::availablePorts();


  int i;

  while (1)
  {
    port_list = QSerialPortInfo::availablePorts();

    for (i=0;i<port_list.size();i++)
    {
        if (!discovered_ports.contains(port_list.at(i)))
            emit new_port_found (port_list.at(i).portName());
    }
    discovered_ports = port_list;
    sleep ( SLEEP_TIME );
  }

}

以上代码在第
if (!discovered_ports.contains(port_list.at(i))) 行抛出以下编译错误:

QtCore/qlist.h: error: no match for 'operator==' (operand types are QSerialPortInfo and const QSerialPortInfo)

如果需要,您可以随时为 QSerialPortInfo 实施自己的 operator== 版本。不过,您需要确保它在代码的其他地方没有其他不良副作用。

类似...

#include <tuple>
#include <QList>
#include <QSerialPortInfo>

bool operator== (const QSerialPortInfo &a, const QSerialPortInfo &b)
{
  return
    std::forward_as_tuple(a.description(),
                          a.manufacturer(),
                          a.portName(),
                          a.productIdentifier(),
                          a.serialNumber())
    ==
    std::forward_as_tuple(b.description(),
                          b.manufacturer(),
                          b.portName(),
                          b.productIdentifier(),
                          b.serialNumber());
}

您可能想要检查您认为对平等重要的属性子集——我只是粗略猜测。