【问题标题】:Signal readyRead() does not execute slot信号 readyRead() 不执行槽
【发布时间】:2017-09-19 19:19:33
【问题描述】:

我有一个比较粗糙的设备(两台计算机通过 COM 端口连接),我必须通过QSerialPort 让它工作。这个想法很简单:数据将通过每个 COM 端口从一个组件发送到另一个组件。 发射器工作正常,通过辅助软件检查,接收数据有问题。我是通过QSerialPort 做的,如下:

一开始我设置了端口:

QSerialPort *serialport = new QSerialPort();
serialport->open(QIODevice::ReadOnly);
serialport->setPortName("COM1");
serialport->setBaudRate(QSerialPort::Baud19200);
serialport->setDataBits(QSerialPort::Data8);
serialport->setParity(QSerialPort::NoParity);

然后我准备捕获这样的数据:

connect(serialport,SIGNAL(readyRead()),this, SLOT(change_gear()) );

在 slot change_gear 中,我只有: qDebug()

但是这个槽从来没有被执行过! 所以,我就是不明白这里出了什么问题,为什么我不能这么简单地从 COM 端口读取数据..

操作系统 - Windows 8, Qt 5.8.0 MinGW 32

【问题讨论】:

  • 设置参数后必须执行以下指令serialport->open(QIODevice::ReadOnly);
  • 当前的QSerialPort 5.9不需要在参数设置后打开,但这样做更方便。一旦端口打开,您可以随意更改参数。电缆另一端的设备将如何反应是另一个问题。我觉得对上述问题的澄清是有道理的,因为这意味着这是一个硬性规定。

标签: c++ qt serial-port tcomport


【解决方案1】:

这样试试

QSerialPort *serialport = new QSerialPort();
serialport->setPortName("COM1");
serialport->setBaudRate(QSerialPort::Baud19200);
serialport->setDataBits(QSerialPort::Data8);
serialport->setParity(QSerialPort::NoParity);

connect(serialport,SIGNAL(readyRead()),this, SLOT(change_gear()) );

serialport->open(QIODevice::ReadOnly);

端口配置后打开,信号连接到插槽

【讨论】:

  • 这不是“规则”。当您使用 QSerialPort (>= 5.3) 将信号连接到插槽时,应该没有区别。我两种方式都这样做,发现两者之间没有区别。事实上,当没有打开的端口时,几乎没有建立连接的愿望,因此我通常会保存连接语句,直到我验证串行端口已打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 2018-03-24
  • 2011-09-28
  • 1970-01-01
相关资源
最近更新 更多