Я пытаюсь захватить последовательные данные, используя QTimer :: SingleShot в лямбда-выражении. Когда & QSerialPort :: readyRead Получен сигнал, а затем в лямбда-выражении я указываю таймер одиночной съемки вызвать слот главного окна, но это не сработало.
Могу ли я использовать лямбду как это или нет?
connect (cHandler-> tSerial, & QSerialPort :: readyRead, this, [this] mutable {QTimer :: singleShot (200, this, SLOT (DataReceived ()));});
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include "comm.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
comm *cHandler;
MainWindow(QWidget *parent = nullptr);
~MainWindow();
uint8_t countReq;
QTimer *rTime;
private:
Ui::MainWindow *ui;
public slots:
void QueryMethod(bool);
void excRequest();
void DataReceived();
void ReceivedDataAndUpdateGUi(QByteArray);
void SerialPortRadioCallBack (bool);
void TcpIpRadioCallBack (bool);
void TcpIpClientRadioCallBack(bool);
void TcpIpServerRadioCallBack(bool);
void SwitchCommType();
void TcpIpServerListenCallBack(bool);
void TcpIpClientConnectCallBack(bool);
void RefreshSerialPortCallBack(bool);
void ConnectSerialPortCallBack(bool);
};
#endif // MAINWINDOW_H
MainWindow. cpp [некоторый код]
void MainWindow::ConnectSerialPortCallBack (bool)
{
if( ui->ConnectSerialPortButton->text() == "Open")
{
try {
QSerialSett SerialConfig = {
ui->PortComboBox->currentText(),
static_cast <QSerialPort::BaudRate>(ui->BaudComboBox->currentText().toUInt()),
static_cast <QSerialPort::DataBits>(ui->DataBitsComboBox->currentIndex()+5),
static_cast <QSerialPort::StopBits>(ui->StopBitsComboBox->currentIndex()),
static_cast <QSerialPort::Parity> (ui->ParityComboBox->currentIndex()),
QSerialPort::NoFlowControl
};
cHandler->tSerial = new portComm(this,SerialConfig);
connect(cHandler->tSerial,&QSerialPort::readyRead,this, [this]() mutable {QTimer::singleShot(200,this,SLOT(DataReceived())); } ); //qDebug() <<cHandler->tSerial.readAll(); print correct data here
cHandler->setLastSessionType(BS_SERIAL_TYPE);
ui->ConnectSerialPortButton->setText("Connected");
ui->ConnectSerialPortButton->setStyleSheet("background-color:green; color:white;");
} catch (...) {
qDebug() << "SERIAL PORT ERROR !";
}
}
else
{
cHandler->tSerial-> close();
delete cHandler->tSerial;
qDebug() << "SERIAL PORT CLOSED ::";
cHandler->setLastSessionType(BS_NO_TYPE);
ui->ConnectSerialPortButton->setText("Open");
ui->ConnectSerialPortButton->setStyleSheet("background-color:red; color:white;");
}
}
void MainWindow::DataReceived()
{
cHandler->tSerial->readAll();
}