void ComDialog::ReadMyCom()
{
//读取串口数据
QByteArray byte_data = myCom->readAll();
// char buf[10];
//将读取到的数据进行转化
QString strDisplay;
if(m_isHexDisplay)//十六进制显示
{
QString str = byte_data.toHex().data();
str = str.toUpper();//转换为大写
for(int i = 0;i
{
QString st = str.mid(i,2);//返回一个字符串 从指定位置返回n个字符
strDisplay += st;
strDisplay += " ";//每个字节中间的空格
}
}
else//字符显示
{
strDisplay = QString(byte_data);
}
//是否显示数据
if(true == DisplayFlag)
{
//将数据显示在主窗口的文本浏览器中
main_ui->ReceiveDatatextBrowser->insertPlainText(strDisplay);
}
// main_ui->textBrowser->insertPlainText(byte_data.toHex().begin());
// if((byte_data.contains("{"))&&(byte_data.contains("}")))//只要接收的数据中有这些判断的字符就为真(不管在那个位置)
// {
// main_ui->lcdNumber->display(temp);//然后在这里面显示就不行 我猜想要把判断的标示移除或者想一下其他的数据转换方式。
// }
//switch(byte_data.at(0))//这两种都行
switch( byte_data[0])
{
case 'a':
byte_data[0]=10;//不是10还不行
main_ui->lcdNumber->display( byte_data.toInt() );//必须要是数字字符串才能正确转换到LCD部件显示
break;
case 'b':
byte_data[0]=10;
main_ui->lcdNumber_2->display( byte_data.toInt() );
break;
case 'c':
byte_data[0]=10;
main_ui->lcdNumber_3->display( byte_data.toInt() );
break;
case 'd':
byte_data[0]=10;
main_ui->lcdNumber_4->display( byte_data.toInt() );
break;
case 'e':
byte_data[0]=10;
main_ui->lcdNumber_5->display( byte_data.toInt() );
break;
case 'f':
byte_data[0]=10;
main_ui->lcdNumber_6->display( byte_data.toInt() );
break;
default:;
}
}
这个类QByteArray 是可以直接带下标byte_data [0]使用的,可以赋值,可以判断。

然后我就用了6个LCD部件用来显示,刚开始我不知道怎么去判断什么数据显示在什么位置,也就是不知道串口接收完一个整包数据怎么去判断包头,现在按照上面的接收就可以了,但是还是不知道为什么一定要赋值10,我想直接赋值0,但是这样LCD就不会显示了,我知道LCD好像是字符串转换为十进制,但是当字符串里面有字母标点或特殊符号它就会显示0 ,所以我就判断完第一个字节就赋值10,这样显示就不会有问题了,就是不知道为了一定要这样做。
