C++ QSerialPort新信号槽语法没有用于调用';连接';

C++ QSerialPort新信号槽语法没有用于调用';连接';,c++,qt,qt5,qtserialport,C++,Qt,Qt5,Qtserialport,我试图使用新的信号和插槽语法,但在connect函数中出现编译错误。在这种情况下如何使用新语法 // 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)

我试图使用新的信号和插槽语法,但在connect函数中出现编译错误。在这种情况下如何使用新语法

// 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);
}
完整错误消息:

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,
                               ^

问题在于
&QSerialPort::error
不明确:

这是您试图连接的信号:

但是还有一个同名的getter:


这是QSerialPort类的不幸设计(也有同样的问题),可能在Qt6中得到修复,但在此之前不会,因为Qt提供的API稳定性保证。在这种情况下不能使用新型语法connects,因为如果存在同名但签名不同的插槽或信号重载,则不能使用它们。您必须使用旧语法。

确切地说Qt和编译器的版本以及您使用的平台是什么?我使用qt5.4.1和Apple LLVM版本6.1.0@MichaelBurr