QSerialPort 新信号槽语法 没有匹配的成员函数,用于调用"连接"

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

本文关键字:成员 函数 用于 连接 调用 新信号 信号 语法 QSerialPort      更新时间:2023-10-16

>我正在尝试使用新的信号和插槽语法,但是在连接函数中遇到编译错误。在这种情况下如何使用新语法?

// 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是模棱两可的:

您正在尝试连接到信号:QSerialPort::error(QSerialPort::SerialPortError)

但是还有一个同名的getter:QSerialPort::error()

这是QSerialPort类的不幸设计(QProcess也有同样的问题),可能会在Qt 6中修复,但在此之前不会,因为Qt所做的API稳定性保证。在这种情况下不能使用新式语法连接,因为如果存在具有相同名称但不同签名的插槽或信号重载,则无法使用它们。您必须改用旧语法。