Qt串口持续输入数据,上位机接收端未响应有关问题
发布时间:2010-05-30 21:18:37 文章来源:www.iduyao.cn 采编人员:星星草
Qt串口持续输入数据,上位机接收端未响应问题
同时发帖在个人博客里面:http://blog.csdn.net/jjzhoujun2010/article/details/7463344
此Qt串口接收程序需要做的工作是:从开发板上不断地传输过来带有“Star”帧头的数据帧,数据是浮点型数据。要求显示的时候也是将浮点数显示出来。我采用的是Polling查询机制,不是EventDriven机制,在textBrowser里面想先显示出除了”Star”帧的数据,先是用十六进制数表示出来。
现在我遇到的问题是:
当我打开上位机串口,并且开启开发板的电源,进行串口数据传输时候,Qt程序会出现未响应,只能把开发板电源关掉等待一会,textBrowser上面就会出现数据,此时的数据只是能看出第一次发送的时候会把“Star”去掉只显示出后面的数据,如图一所示。
需要帮忙解决的问题是:
1.用Qt写串口程序时候,在利用Polling机制时,面对不断读取的串口数据,如何让textBrowser一直输出数据而不出现程序未响应的情况?
2.接图一,除了第一个程序能够去掉“Star”帧头外,如何让以后的帧传过来时候都可以去掉“Star”帧头,从而只是显示后面的数据。
另附上我的主要实现代码:
[cpp] view plaincopy
//**************mainwindow.h*********************//
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include<QMainWindow>
#include<QString>
#include<QStandardItemModel>
#include"win_qextserialport.h"
namespaceUi{
classMainWindow;
}
classMainWindow:publicQMainWindow
{
Q_OBJECT
public:
explicitMainWindow(QWidget*parent=0);
~MainWindow();
private:
Ui::MainWindow*ui;
Win_QextSerialPort*myCom;
QTimer*myReadTimer; //采用polling查询的方式进行
privateslots:
voidreadMyCom();
voidon_openMyComBtn_clicked();
voidon_closeMyComBtn_clicked();
};
#endif//MAINWINDOW_H
[cpp] view plaincopy
//***********mainwindow.cpp***************//
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include<QMessageBox>
MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi::MainWindow)
{
ui->setupUi(this);
ui->closeMyComBtn->setEnabled(false);
setWindowTitle(tr("串口调试主界面_P1"));
}
MainWindow::~MainWindow()
{
deleteui;
}
voidMainWindow::readMyCom()
{
//个人想法:先让其在文本框中全部输出字符串下,串口传的是标准ASCII值,然后如果直接显示的时候,又把它转成字符串形式
//由于有的ASCII值转换成字符串后不能在屏幕上直接显示,所以会出现卡死程序情况,停止传输后就只输出Star字符
//因此需要先把串口里面的ASCII值转换成十六进制数,然后再将其转换成浮点数,分别显示在表格里面 --CommentByDream_Fly
QStringtemp=' ';
QStringstrHex;//16进制数据
QByteArraydataAll=myCom->readAll();
intrflag=0;
if(!dataAll.isEmpty())
{
QDataStreamout(&dataAll,QIODevice::ReadWrite);
//下面是判断帧头“Star”,不知道如何直接读入4个字节的字符串Star,然后直接判断??
if(!out.atEnd())
{
qint8judge1=0;
out>>judge1;
if(judge1==83)
{
qint8judge2=0;
out>>judge2;
if(judge2==116)
{
qint8judge3=0;
out>>judge3;
if(judge3==97)
{
qint8judge4=0;
out>>judge4;
if(judge4==114)
rflag=1;
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
Qt Creator 2.1 Beta 2 和Qt 4.7.1 发布
转载:http://www.cmdn.net/news/1148
诺基亚发布了Qt框架的跨平台开发环境(IDE) –Qt Cre...
-
Qt菜单的显示问题
我的是在ubuntu11.10虚拟机上运行的qt creator4,现在刚入门,按照http://www.yafeilinux.com/?p=30的例子添加菜单...
-
'make' 不是内部或外部命令,也不是可运行的程序或批处理文件?
根据HTML code
http://v.youku.com/v_show/id_XMTA1NDEzODUy.html
的...
-
visual studio 2010编译qt的demo无法运行,求教。
安装的qt-win-opensource-4.8.0-vs2010.exe和qt-vs-addin-1.1.10.exe
然后想运行...
-
QT,'HANDLE'没有命名的一个类型
网上说QT是,一处编写,处处编译,可是我在windows下写好了串口通讯程序,在linux下编译时,却提示'HANDLE'...
-
关于QT的授权
一直都没搞懂QT的商业授权是怎么回事,请问如果我用QT在电视机机顶盒上开发一款基于QT的播放器,如果我没有获得商业授...
-
有关QTable制作表格保存问题
我使用的是QT2,需要制作一个表格,然后输入数据后保存。我源码在以下网址,set.zip压缩包中http://www.qt...
-
Qt怎样禁止用户最大化窗口
用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化,最小化三个按...
-
QT4.4.3版本窗体透明后界面失去焦点无法响应键盘事件
用的是Qt4.4.3版本,窗体透明的方法如下:
C/C++ code
QPalette pal = pale...
-
QT4下载到开发板的问题
友善的2440开发板,按照一些教程装好了QT4在Linux下的开发环境。
用NFS启动开发板,把arm版编译出来的应用程...