【问题标题】:QSerialPort new signal slot syntax no matching member function for call to 'connect'QSerialPort 新信号槽语法没有匹配的调用“连接”的成员函数
【发布时间】:2015-08-28 17:37:08
【问题描述】:

我正在尝试使用新的信号和槽语法,但在连接函数时出现编译错误。在这种情况下如何使用新语法?

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

【问题讨论】:

  • 究竟是什么版本的 Qt 和编译器以及您使用的是什么平台?
  • 我使用的是 Qt 5.4.1 和 Apple LLVM 版本 6.1.0 @MichaelBurr

标签: c++ qt qt5 qtserialport


【解决方案1】:

问题是&QSerialPort::error 不明确:

您尝试连接的信号是:QSerialPort::error(QSerialPort::SerialPortError)

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

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

【讨论】:

  • 这也发生在 QSslSocket::sslErrors()
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多