简体   繁体   中英

QSerialPort new signal slot syntax no matching member function for call to 'connect'

I am trying to use the new signal and slot syntax, but I am getting a compile error at connect function. How to use the new syntax in this case?

// Qt 5.4.1, Apple LLVM version 6.1.0 and qmake 3.0
private slots:
    void onError(QSerialPort::SerialPortError code);

private:
    QSerialPort *m_port;

Link::Link(QObject *parent) : QObject(parent) {
  m_port = new QSerialPort(parent);

  connect(m_port, &QSerialPort::error, this, &Link::onError);
}

Complete error message:

error: no matching member function for call to 'connect'
 connect(m_port, &QSerialPort::error, this, &Link::onError);
  ^~~~~~~

candidate function not viable: no overload of 'error' matching 'const char *' for 2nd argument
static QMetaObject::Connection connect(const QObject *sender, const char *signal,
                               ^

The problem is that &QSerialPort::error is ambiguous:

There's the signal you're trying to connect to: QSerialPort::error(QSerialPort::SerialPortError)

But then there's also a getter with the same name: QSerialPort::error()

That's unfortunate design of the QSerialPort class ( QProcess has the same problem), and might be fixed in Qt 6, but not before that, due to the API stability guarantees Qt makes. The new-style syntax connects cannot be used in this case, as they cannot be used if there are slots or signal overloads with the same name but different signature. You have to use the old syntax instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM