Ric*_*rdo 2 c++ qt qt5 qtserialport
我试图使用新的信号和插槽语法,但我在连接函数时遇到编译错误.在这种情况下如何使用新语法?
// 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);
}
Run Code Online (Sandbox Code Playgroud)
完整的错误消息:
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,
^
Run Code Online (Sandbox Code Playgroud)
问题&QSerialPort::error是含糊不清:
您尝试连接的信号是:QSerialPort :: error(QSerialPort :: SerialPortError)
但是之后还有一个同名的getter:QSerialPort :: error()
这是QSerialPort类的不幸设计(QProcess有相同的问题),并且可能在Qt 6中修复,但在此之前没有,因为Qt的API稳定性保证.在这种情况下不能使用新式语法连接,因为如果存在具有相同名称但签名不同的插槽或信号重载,则不能使用它们.您必须使用旧语法.