我是Qt Creator的新手,我正试图从通过I2C进行通信的光传感器读取数据。我制作了一个类PortListener
,该类应返回一次调用后在控制台上接收到的数据。
PortListener::PortListener(const QString &portName)
{
this->port = new QSerialPort();
port->setPortName(portName);
port->setBaudRate(QSerialPort::Baud9600);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::NoParity);
port->setStopBits(QSerialPort::OneStop);
port->setFlowControl(QSerialPort::NoFlowControl);
port->open(QIODevice::ReadWrite);
QByteArray readData = port->readAll();
qDebug() << "message:" << readData;
}
但是我唯一的消息是:
QIODevice::read (QSerialPort): device not open
message: ""
我不明白那是什么意思?
答案 0 :(得分:1)
1。打开串口,然后设置参数。
PortListener::PortListener(const QString &portName)
{
this->port = new QSerialPort();
port->open(QIODevice::ReadWrite);
port->setPortName(portName);
port->setBaudRate(QSerialPort::Baud9600);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::NoParity);
port->setStopBits(QSerialPort::OneStop);
port->setFlowControl(QSerialPort::NoFlowControl);
}
2。将 readyRead 信号连接到插槽,插槽就是这样。
void PortListener::readyReadSlot()
{
while (!port.atEnd()) {
QByteArray data = port.readAll();
}
}
这很像 QextSerialPort ,以下是我的应用程序中的代码。
void SpClient::start()
{
myComClient = new QextSerialPort(Setting::devCom);
if(myComClient->open(QIODevice::ReadWrite))
{
qDebug() << "open " << Setting::devCom << "as client success";
}
myComClient->setBaudRate(BAUD9600);
myComClient->setDataBits(DATA_8);
myComClient->setParity(PAR_NONE);
myComClient->setStopBits(STOP_1);
myComClient->setFlowControl(FLOW_OFF);
myComClient->setTimeout(50);
....
}
答案 1 :(得分:0)
我的猜测是您的代码无法打开串行端口,在Linux打开USB端口的情况下,我遇到了权限问题。您只需要执行chmod即可主要授予$ USER访问权限。