• 7301阅读
  • 7回复

[提问]Qt  串口通信不能就收汉字的问题  求解答!!!!! [复制链接]

上一主题 下一主题
离线isaacedvr
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-05
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —




左边第一副是我用Qt做的一个界面 主要是实现数据通过串口rs232 传输给51 然后51 返回数据在Qt上面显示
问题是:我只能传输数字和字符 不能传输汉字 也不知道汉字传输成功没,我知道的是:接受的是乱码 全是?
代替了。求高手的帮助,在此先谢过了!
右边这一幅图片是我用串口调试工具 调试的 在那上面能够显示汉字 而且很正常啊 就是用Qt给他发送数据时
不能正常显示汉字。




下面是我一些代码:


//这个是我的串口初始化代码

    struct PortSettings myComSetting = {BAUD4800,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
   //  定义一个结构体,用来存放串口各个参数
     myCom = new Win_QextSerialPort("com2",myComSetting,QextSerialBase::EventDriven);
   //  定义串口对象,并传递参数,在构造函数里对其进行初始化
     myCom ->open(QIODevice::ReadWrite);
    // 以可读写方式打开串口
     connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
    //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作







void MainWindow::readMyCom()//读串口函数
{
#ifdef DEBUG
    qDebug()<<"HelloB";
#endif


    QByteArray temp = myCom->readAll();


       //读取串口缓冲区的所有数据给临时变量temp
        QString myStrTemp;
        myStrTemp = QString(temp);


       ui->textBrowser->insertPlainText(myStrTemp);


       //将串口的数据显示在窗口的文本浏览器中
}







//这个是我点击上图左 的 发送按钮 对应的接口
void MainWindow::on_pushButtonTrans_clicked()
{
myCom->write( ui->lineEdit->text().toAscii());
}



离线isaacedvr
只看该作者 1楼 发表于: 2012-04-05
发出来的贴 跟预览不一致,可能是我浏览器的问题: 补充下左边第一指的是上面的一幅图
同理你也知道了 右边的那一副是对应下面一副。呵呵,对于懂的人来说就有啰嗦一下了 因为你们一看就明白了
离线roywillow

只看该作者 2楼 发表于: 2012-04-05
有没有注意过编码的问题?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ffii4455

只看该作者 3楼 发表于: 2012-04-05
看来大家写串口都用的是那个类啊~~~

那个好像要设置编码的。要把String的编码类型设置成GBK
离线isaacedvr
只看该作者 4楼 发表于: 2012-04-06
回 3楼(ffii4455) 的帖子
我是把他设置成了utf-8了 代码如下:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
离线netlove

只看该作者 5楼 发表于: 2012-04-06
存的时候给转换成local8Bit ,写出来的时候从fromLocal8Bit转成QString
离线isaacedvr
只看该作者 6楼 发表于: 2012-04-06
谢谢大家了。搞定了, 太兴奋!!!! 还是编码的问题:我就按楼上说的做通了。
我把代码贴出来共享下,以后有同样的问题的可以参考下。
这是在发送时写的函数里的其中一句!
myCom->write( ui->lineEdit->text().toLocal8Bit());
接受是用:    QByteArray temp = myCom->readAll(); 就行啦!


还得设置下:   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

最后说明环境是:windows  Qt4  51单片机
离线feixiang1990

只看该作者 7楼 发表于: 2012-09-09
佩服啊啊啊啊 啊啊 同样的问题我也遇到了
快速回复
限100 字节
 
上一个 下一个