串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要。下面将一步一步叙述开发过程:

1、下载第三方QT串口类,免积分

http://download.csdn.net/detail/cmh477660693/9726584

2、首先来看一下串口通信几个关键文件:

posix_qextserialport.cpp和posix_qextserialport.h文件定义了一个Posix_QextSerialPort类;

qextserialbase.cpp和qextserialbase.h文件定义了一个QextSerialBase类;

3、读取串口方式:Polling(查询方式)和EventDriven(事件驱动方式)

此两种方式在QextSerialBase类的一个枚举变量QueryMode中定义了。

事件驱动方式:使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,在事件驱动、的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。

查询方式:读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。需要建立定时器来读取串口的数据。

注意:在Windows下支持以上两种模式,而在Linux下只支持Polling模式。

4、总结一下:

我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。在Linux下是:

qextserialbase.cpp和qextserialbase.h 以及posix_qextserialport.cpp和posix_qextserialport.h

在Linux下我们只能使用查询Polling方式。

5、工程命名为myCom,Base Class选择mainwindow。

然后将有关Linux下串口配置文件(cpp和h文件)添加到工程里面去:

ui界面如图:

并给Push_Button右键添加点击信号。

6、在miniwindow.h添加头文件和声明私有槽函数

#include”posix_qextserialport.h”

private slots:

void readMyCom();

void on_pushButton_clicked();

在minwindows.cpp添加:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "qextserialbase.h"

#include

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

QTimer *readtimer = new QTimer(this);

readtimer->start(100);

ui->setupUi(this);

struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

//定义一个结构体,用来存放串口各个参数

myCom = new Posix_QextSerialPort("/dev/ttyUSB0",myComSetting,QextSerialBase::Polling);

myCom ->open(QIODevice::ReadWrite);//以可读写方式打开串口

myCom->setTimeout(100);//设置时间间隔

connect(readtimer,SIGNAL(timeout()),this,SLOT(readMyCom()));

//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::readMyCom() //读串口函数

{

QByteArray temp = myCom->readAll();

//读取串口缓冲区的所有数据给临时变量temp

ui->textBrowser->insertPlainText(temp);

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

}

static char ConvertHexChar(char ch)

{

if((ch >= '0') && (ch <= '9'))

return ch-0x30;

else if((ch >= 'A') && (ch <= 'F'))

return ch-'A'+10;

else if((ch >= 'a') && (ch <= 'f'))

return ch-'a'+10;

else return (-1);

}

static QByteArray QString2Hex(QString str)

{

QByteArray senddata;

int hexdata,lowhexdata;

int hexdatalen = 0;

int len = str.length();

senddata.resize(len/2);

char lstr,hstr;

for(int i=0; i

{

hstr=str[i].toLatin1();

if(hstr == ' ')

{

i++;

continue;

}

i++;

if(i >= len)

break;

lstr = str[i].toLatin1();

hexdata = ConvertHexChar(hstr);

lowhexdata = ConvertHexChar(lstr);

if((hexdata == 16) || (lowhexdata == 16))

break;

else

hexdata = hexdata*16+lowhexdata;

i++;

senddata[hexdatalen] = (char)hexdata;

hexdatalen++;

}

senddata.resize(hexdatalen);

return senddata;

}

void MainWindow::on_pushButton_clicked()

{

//myCom->write(ui->lineEdit->text().toLatin1().data());  //以ASCII码形式将数据写入串口

QByteArray senddata = QString2Hex(ui->lineEdit->text()); //转换为16进制

myCom->write(senddata);

}

linux串口助手开发,linux下QT开发串口通信助手相关推荐

  1. 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...

    用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...

  2. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  3. ARM开发板下Qt实现中文输入法的波折历程

    ** ARM开发板下Qt实现中文输入法的波折历程 ** 在移植软键盘输入法时候,如果用到中文输入法一定会用到数据库,移植的Qt工程运行时如果碰到如下error,一定要看看我的文章,对你会有所帮助!!! ...

  4. linux下QT开发串口通信助手

    串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要.下面将一步一步叙述开发过程: 1.下载第三方QT串口类,免积分 http://download.csdn.net/detail/ ...

  5. linux eclipse下qt开发环境搭建,Qt Eclipse开发环境的部署 上篇

    关于Qt  Eclipse的开F发,将会从不同的环境中区安装部署,分为上.中.篇,三篇文章来讲.Windows,Linux平台下安装使用eclipse + QT4.4.3开发环境,Windows,Li ...

  6. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  7. linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用

    qwt的安装与使用 安装好qt开发环境后,先去下载qwt库源代码. 以我下载的qwt-6.0.1.zip为例,解压得到qwt-6.0.1. 1.安装qwt-6.0.1 执行下面的命令:1 cd qwt ...

  8. 【Qt】ubuntu下Qt开发环境的搭建

    下载对应版本的Qt开发环境 Qt官网下载地址:https://download.qt.io 国内镜像下载地址:https://mirrors.cloud.tencent.com/qt/ .建议用镜像下 ...

  9. 关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)

    关于最近比较火的物联网视频监控项目,在这里给大家分享下图片传输这一块,首先客户端显示是在Windows下Qt中,服务器是在linux系统ubuntu中,服务端打开本地两张图片循环发送给客户端Qt进行显 ...

最新文章

  1. java微信菜单获取openid_微信二次开发点击菜单openId的获取
  2. 构建Chua 混沌电路 - 基本测试
  3. Android中的APinner2
  4. 使用Intent来启动Activity并传递参数
  5. 51nod 1258 序列求和 V4
  6. mysql中使用like模糊查询时如何转义%
  7. linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱
  8. 车载导航系统中常用物理量和单位
  9. 如何在苹果Mac更改通知显示的时长?
  10. 微信开发者工具安装教程
  11. 【推荐算法】协同过滤算法介绍
  12. Java经典程序编程50题(较适合初学者)
  13. 解决SublimeText中文注释乱码
  14. 车轱辘APP提交到各应用市场的心得~
  15. tkinter + wxpy 实现微信发送信息 接收消息 并保存聊天记录的功能(GUI)
  16. 使用zii.widgets.CDetailView显示内容
  17. 【Druid】(八)Apache Druid 核心插件 Kafka Indexing Service SLS Indexing Service
  18. 自学java,学多久可以找到工作?
  19. 一种基于滑动平均的时间序列滤波方法(Java实现)
  20. bitmap亮度的互转,RBG获取等

热门文章

  1. 美图进军“社交”领域:主要业务被重新划分为三块
  2. [昆仑叶哲华]房产的基本术语解读选房不愁
  3. wincc的画面怎么用博图打开_如何把西门子精智面板画面直接转换成博图WINCC RT ADV画面...
  4. LayaAir拖拽移动对象并吸附(附源码)
  5. Unity UGUI 鼠标悬停一段时间显示Text文字
  6. web学生网页设计作业源码网页设计作业学生网页课程设计作业成品DIV+CSS
  7. 简单粗暴的美颜滤镜不可取
  8. 《DFQ》开发随录——资源管理
  9. 查询数据库中的第10到20条记录
  10. 苦逼程序员的日常生活