• 6662阅读
  • 6回复

[提问]如何将串口发送来的数据分别显示? [复制链接]

上一主题 下一主题
离线luna31
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-27
这是原来的程序,发送过来的串口数据格式是:
Data required:Node_Addr=0x2,BattVol=2375,Temp=26.44,Humi=41.86;

  1. void MainWindow::readMyCom(){  QByteArray temp = port->readAll();  ui->logBrowser->insertPlainText(temp);}
[pre][/pre]
怎样能让数据分别在电压、温度、湿度的窗口显示...
初学者求赐教啊.....[/pre]
[ 此帖被luna31在2011-05-27 13:57重新编辑 ]
离线jdwx

只看该作者 1楼 发表于: 2011-05-27
Data required:Node_Addr=0x2,BattVol=2375,Temp=26.44,Humi=41.86;
QString str=上面的内容;
QStringList sl=str.split(":");
str=sl.at(1);//Node_Addr=0x2,BattVol=2375,Temp=26.44,Humi=41.86
sl=str.split(",");//sl里有4个string
str=sl.at(0);第一个是add
QStringList sl2=str.split("=");
sl2.at(0)里:Node_Add
sl2.at(1)里:0x2


发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 2楼 发表于: 2011-05-27
还可以用正则表达式,能简单点。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线luna31
只看该作者 3楼 发表于: 2011-05-27
引用第1楼jdwx于2011-05-27 14:27发表的  :
Data required:Node_Addr=0x2,BattVol=2375,Temp=26.44,Humi=41.86;
QString str=上面的内容;
QStringList sl=str.split(":");
str=sl.at(1);//Node_Addr=0x2,BattVol=2375,Temp=26.44,Humi=41.86
sl=str.split(",");//sl里有4个string
.......




可是串口发送过来的内容不是一次一整句。



  1. QByteArray temp = port->readAll();    qDebug()<<temp;




qDebug里面显示的是:
"D"
"at"
"a "
"r"
"eq"
"u"
"ire"
……


QString str怎么等于temp里面的内容?

离线tshirtmanid
只看该作者 4楼 发表于: 2011-05-27
都是些逻辑问题,逻辑上多思考下。你这个问题相当于怎么将一些字符放到QString字符串中。最简单的是:那么我对temp里的字符串做个循环,每次取一个字符放到QString中。查看下qt的帮助文档,QString有个append函数,那么更加方便。学会看下文档,学会多思考下。

QString strCOMValue;
strCOMValue.append(temp);

tbool testDataFormat()
{
    //我故意将BattVol的值设置成空,用来测试某项值如果为空的结果
    QString strTest = "Data required:Node_Addr=0x2,BattVol=,Temp=26.44,Humi=41.86";

    //正则表达式,按照[]括号中的=和,号进行分割
    //当然你的值中不能有这些符号
    QRegExp regExp("[=,]");  

    QStringList strList = strTest.split(regExp);
    if (strList.size() != 8) //4对
    {
        qFatal("the strText format is wrong. strTest:%s", strTest.toStdString().c_str());
        return false;
    }


    /*        打印结果如下
            Data required:Node_Addr
            0x2
            BattVol
            
            Temp
            26.44
            Humi
            41.86
    */
    QString strVal;
    foreach (strVal, strList)
    {
        qDebug("%s ", strVal.toStdString().c_str());
    }

    return true;
}
离线luna31
只看该作者 5楼 发表于: 2011-05-31
回 4楼(tshirtmanid) 的帖子
谢谢!!!
我做出来了!!
离线李玉荣
只看该作者 6楼 发表于: 2011-11-07
回 5楼(luna31) 的帖子
能否借鉴一下,发个程序给我
快速回复
限100 字节
 
上一个 下一个