【问题标题】:qt serial communication, readyRead not emittedqt 串行通信,readyRead 未发出
【发布时间】:2015-07-17 08:25:23
【问题描述】:

我正在使用 CameraLink 内部虚拟 COM 端口与 CameraLink 相机通信。我写了以下代码:

serial=new QSerialPort(this);
connect(serial,SIGNAL(readyRead()),SLOT(readFPN()));
serial->setPortName(comPort);
serial->setBaudRate(QSerialPort::Baud9600);
serial->setStopBits(QSerialPort::OneStop);
serial->setParity(QSerialPort::NoParity);
serial->open(QIODevice::ReadWrite);

QString comm=QString("r gwbr\r"); //read red channel gain
serial->write(comm.toUtf8(),comm.size());

QString comm=QString("r gwbb\r"); //read blue channel gain
serial->write(comm.toUtf8(),comm.size());

... more serial commands

readFPN 函数现在除了将读取的数据附加到 QByteArray 之外什么都不做:

void ts4control_calibrationdialog::readFPN()
{
    resp+=serial->readAll();
}

但是 readFPN 函数永远不会被调用。我设置了一个断点,程序在不调用回调的情况下跳过了写入命令。与设备的一般通信使用上述设置在 COM 端口终端中进行。

要发出信号,我必须进行哪些更改?或者我怎样才能找出它为什么不起作用?有什么调试思路吗?

【问题讨论】:

    标签: c++ qt serial-port qt-signals


    【解决方案1】:

    完成串行命令编写后,使用QSerialPort::flush() 写入底层串行端口。

    【讨论】:

    • 试过了...谢谢。仍然没有调用回调
    【解决方案2】:

    我遇到了同样的问题,读了这个,读了一些其他无用的(对我来说)的东西,然后它终于发生在我身上,看看 Qt 提供的一个例子 abour QSerialPort(称为终端),在我看到“连接”行的写法不同 而不是:

    connect(serial,SIGNAL(readyRead()),SLOT(readFPN()));
    

    应该是:

    connect( serial, &QSerialPort::readyRead, this, &ts4control_calibrationdialog::readFPN );
    

    我几乎是个菜鸟,但我希望这对你有用!

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多