【发布时间】:2022-01-08 14:47:22
【问题描述】:
我正在使用DataRouter 类来处理与QSerialPort 的通信(然后在其他地方传达结果)。连接的设备每秒左右发送一个状态包,我想在不轮询设备的情况下读取它。我尝试直接使用QSerialPort的waitForReadyRead函数,但是无论我设置等待时间多长,它总是超时。看着 here 和 here 我看到信号可以连接到 Lambda 函数。现在我正在尝试将QSerialPort 的readyRead 信号连接到调用我的on_dataRecieved 函数的Lambda,但我收到错误C2665:"QObject::connect: none of the 3 overloads could convert all of the argument types。以下是我所拥有的示例:
DataRouter.h
template<class SerialPort>
class DataRouter
{
public:
DataRouter ();
private slots:
on_dataRecieved();
private:
shared_ptr<SerialPort> m_port;
};
DataRouter.cpp
template<class SerialPort>
DataRouter<SerialPort>::DataRouter()
{
m_port = std::make_shared<SerialPort>()
QObject::connect(m_port, &QSerialPort::readyRead, this, [=](){this->on_dataRecieved();})
}
template<class SerialPort>
void DataRouter<SerialPort>::on_dataRecieved()
{
//Do stuff
}
【问题讨论】: