qextserialport中的readAll的问题!!!

magicggyy 2014-11-12 09:53:39
串口另外一端发送的0xff,qt程序这边用readAll读出来变成了0x7f这个问题怎么解决?
大家有没有碰到过这种情况?
...全文
495 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
是虚拟串口的问题...我用串口线就没有这个问题了...

但是虚拟串口不影响我的串口助手...搞不清楚了...
dbzhang800 2014-11-12
  • 打赏
  • 举报
回复
引用 10 楼 qq229596421 的回复:
用串口助手没有问题啊... 不会吧...bug啊...这么伤啊...
说是这么说,但是出现这个bug的可能性太小了。所以我更怀疑是你的设置问题。 不过即使是bug,只要你能重现,那就也没什么。对QextSerialPort来这么小的库说,调试定位并解决问题 ,非常简单。
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
不是啊...readAll是qiodevice这个系统库里的函数啊..
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
用串口助手没有问题啊...
不会吧...bug啊...这么伤啊...
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
用串口助手没有问题啊...
不会吧...bug啊...这么伤啊...
dbzhang800 2014-11-12
  • 打赏
  • 举报
回复
引用 7 楼 qq229596421 的回复:
另一端是是串口助手...用的虚拟串口连接的...设置都是一样的...
你这一端也用 串口助手试过么? 数据正常么? 如果串口助手正常,QextSerialPort 在正确配置的情况下不正常。则是QextSerialPort BUG。
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
另一端是是串口助手...用的虚拟串口连接的...设置都是一样的...
dbzhang800 2014-11-12
  • 打赏
  • 举报
回复
引用 5 楼 qq229596421 的回复:
FLOW_OFF PAR_NONE DATA_8 STOP_1 QextSerialbase::Eventdriven
你通讯的两端都是用的Qext,且都是这个配置么?
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
FLOW_OFF
PAR_NONE
DATA_8
STOP_1
QextSerialbase::Eventdriven
dbzhang800 2014-11-12
  • 打赏
  • 举报
回复
我关心的是你的串口设置是否正确,比如databits 你到底用的几位,是8位吗??
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
0x7f是0x7f 0x80就变成0x00了 0x81是0x01 0x82是0x02
magicggyy 2014-11-12
  • 打赏
  • 举报
回复
别的read类函数还没有用。。。什么设置会影响读的字节的第8位。。。读出来的字节的第8位都是0
dbzhang800 2014-11-12
  • 打赏
  • 举报
回复
1. 首先检查串口设置是否正确。通讯双方设置是否一致。 2. 你强调readAll() 的问题。潜台词是用其他的 read 类函数时没有这个问题么??
void Widget::Select() //查询 { QString name = ui->lineEdit->text(); model->setFilter(QObject::tr("id = '%1'").arg(name)); //根据姓名进行筛选 model->select(); //显示结果 } void Widget::Delect() //删除当前行 { int curRow = ui->tableView->currentIndex().row(); //获取选的行 model->removeRow(curRow); //删除该行 int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定" "删除当前行吗?"), QMessageBox::Yes,QMessageBox::No); if(ok == QMessageBox::No) { model->revertAll(); //如果不删除,则撤销 } else model->submitAll(); //否则提交,在数据库删除该行 } void Widget::Add() //插入记录 { int rowNum = model->rowCount(); //获得表的行数 int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),id); //model->submitAll(); //可以直接提交 } void Widget::Back() //返回全表 { model->setTable("student"); //重新关联表 model->setHeaderData(0, Qt::Horizontal, "Time"); model->setHeaderData(1, Qt::Horizontal, "Temperature"); model->select(); //这样才能再次显示整个表的内容 } void Widget::Amend() //提交修改 { model->database().transaction(); //开始事务操作 if (model->submitAll()) { model->database().commit(); //提交 } else { model->database().rollback(); //回滚 QMessageBox::warning(this, tr("tableModel"), tr("数据库错误: %1").arg(model->lastError().text())); } } void Widget::Get_time() { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->submitAll(); } void Widget::readMyCom() { QByteArray temp = myCom->readAll(); if(temp.size()!=0) { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->setData(model->index(rowNum,1),temp); model->submitAll(); data_light=temp.toInt(); } ui->Receive->append(temp); } void Widget::openCom() { QString portName = ui->portNameComboBox->currentText(); myCom = new Win_QextSerialPort(portName,QextSerialBase::EventDriven); myCom ->open(QIODevice::ReadWrite); if(ui->baudRateComboBox->currentText()==tr("9600")) myCom->setBaudRate(BAUD9600); else if(ui->baudRateComboBox->currentText()==tr("115200")) myCom->setBaudRate(BAUD115200); myCom->setFlowControl(FLOW_OFF); myCom->setTimeout(500); connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom())); ui->openMyComBtn->setEnabled(false); ui->closeMyComBtn->setEnabled(true); ui->baudRateComboBox->setEnabled(false); ui->portNameComboBox->setEnabled(false); }

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧