无法为 QT 连接函数提供参数

Cannot Give a Parameter To QT connect Function

本文关键字:参数 函数 连接 QT      更新时间:2023-10-16

我在Visual Studio 2013的Qt项目(5.5)中实现了串行通信的字节读取。我的代码在这里:

主.cpp

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    //QCoreApplication coreApplication(argc, argv);
    int argumentCount = QCoreApplication::arguments().size();
    QStringList argumentList = QCoreApplication::arguments();
    QTextStream standardOutput(stdout);
    if (argumentCount == 1) {
        standardOutput << QObject::tr("Usage: %1 <serialportname> [baudrate]").arg(argumentList.first()) << endl;
        return 1;
    }
    QSerialPort serialPort;
    QString serialPortName = argumentList.at(1);
    serialPort.setPortName(serialPortName);
    int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
    serialPort.setBaudRate(serialPortBaudRate);
    if (!serialPort.open(QIODevice::ReadOnly)) {
        standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
        return 1;
    }
    Camera cam2;
    //cam2.showCamera();
    cam2.showCamera();
    cam2.showFullScreen();
    QByteArray abc;
    SerialPortReader serialPortReader(&serialPort,abc);
    //return coreApplication.exec();
    return app.exec();
}; 

串行端口阅读器.cpp

#include "serialportreader.h"
#include <QCoreApplication>
QT_USE_NAMESPACE
SerialPortReader::SerialPortReader(QSerialPort *serialPort, QByteArray abc, QObject *parent)
: QObject(parent)
, m_serialPort(serialPort)
, m_standardOutput(stdout)
{
    connect(m_serialPort, &QSerialPort::readyRead, this, &SerialPortReader::handleReadyRead);       
}
SerialPortReader::~SerialPortReader()
{
}
void SerialPortReader::handleReadyRead()
{
    m_readData.append(m_serialPort->readAll());
    if (!m_readData.isEmpty()) {
        m_standardOutput << m_readData << endl;
        m_readData.clear();
    }
}

此代码成功运行。我想将数组的内容设置为 abc 数组m_readData以便我可以在主范围内评估消息。为了实现这一点,我给了abc数组来处理ReadyRead函数作为参数。但是,它会给出错误。代码在这里:

SerialPortReader::SerialPortReader(QSerialPort *serialPort, QByteArray abc, QObject *parent)
: QObject(parent)
, m_serialPort(serialPort)
, m_standardOutput(stdout)
{
    connect(m_serialPort, &QSerialPort::readyRead, this, &SerialPortReader::handleReadyRead(abc));
}
SerialPortReader::~SerialPortReader()
{
}
void SerialPortReader::handleReadyRead(QByteArray abc)
{
    m_readData.append(m_serialPort->readAll());
    if (!m_readData.isEmpty()) {
        m_standardOutput << m_readData << endl;
        m_readData.clear();
    }
}  

错误:

serialportreader.cpp(45): error C2102: '&' requires l-value

第45行:

connect(m_serialPort, &QSerialPort::readyRead, this, &SerialPortReader::handleReadyRead(abc));

你不能以这种方式将局部变量传递给插槽,但你尝试做的事情甚至不需要它。您可以将abc存储到构造函数中的成员变量,并在插槽中使用它。BUT:你必须将其更改为引用,否则对构造函数的调用会复制数组,因此 main 函数中的原始数组不受影响。

你也可以把这个数组实现为SerialReader的成员变量,并提供一个getter函数,以便main函数(或数据的使用者)可以从读取器实例中提取这些数据。