нет совпадения для 'operator ==' (типы операндов: QSerialPortInfo и const QSerialPortInfo) - PullRequest
0 голосов
/ 04 марта 2020

Следующий код является частью подкласса 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: ошибка: нет совпадения для 'operator ==' (типы операндов: QSerialPortInfo и const QSerialPortInfo)

1 Ответ

1 голос
/ 04 марта 2020

Если вам нужно, вы всегда можете реализовать собственную версию operator== для QSerialPortInfo. Однако вам нужно убедиться, что в другом месте кода нет других нежелательных побочных эффектов.

Что-то вроде ...

#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());
}

Возможно, вы захотите проверить подмножество свойств, которые вы считаете важными для равенства - у меня только приблизительное предположение.

...