红联Linux门户
Linux帮助

Qt简单串口调试助手源码

发布时间:2016-08-16 09:54:35来源:linux网站作者:maowendi
对于一个做嵌入式的人来讲,最熟悉的上位机软件就是串口调试助手了,所以开始学Qt的时候,就想着要实现一个串口调试肋手,今天终于写的差不多了,把他共享出来。也感谢那些网上开源的人们对我的帮助,谢谢!
 
1.开发环境ubuntu16.04+Qt5.6.1
 
2.串口调试助手效果图
Qt简单串口调试助手源码
如出现 permission denied请用sudo执行程序就可。
 
3.源码
mainwindow.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QSerialPort;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
private slots:
void on_openButton_clicked();
void on_sendButton_clicked();
void readyReadSlot();
void on_pushButtonClearR_clicked();
void on_pushButtonClearS_clicked();
private:
QSerialPort *serialPort;
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
 
mainwindow.c文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QtSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//获取可用的串口
ui->serialPortComboBox->addItem(info.portName());
ui->radioButtonTextR->setChecked(true);
ui->radioButtonTextS->setChecked(true);
serialPort = new QSerialPort();
setWindowTitle(tr("串口助手"));
}
MainWindow::~MainWindow()
{
delete ui;
delete serialPort;
}
void MainWindow::on_openButton_clicked()  //打开串口槽函数
{
serialPort->setPortName(ui->serialPortComboBox->currentText());//获取要打开的串口
if(!serialPort->isOpen()) //如果之前是没有打开的则进行open动作
{
if(serialPort->open(QIODevice::ReadWrite))//如果打开成功了,则按钮显示“关闭”
{
//××××××××××××××××××××××××××设置默认串口参数××××××××××××××××××××××××××××××××//
//serialPort->setBaudRate(QSerialPort::Baud115200);   //波特率19200
serialPort->setBaudRate(ui->comboBoxBaud->currentText().toInt());
serialPort->setDataBits(QSerialPort::Data8);   //数据位8位
serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控
switch (ui->comboBoxStop->currentIndex()) {
case 0:
serialPort->setStopBits(QSerialPort::OneStop); //1位停止位
break;
case 1:
serialPort->setStopBits(QSerialPort::OneAndHalfStop); //1.5位停止位
break;
case 2:
serialPort->setStopBits(QSerialPort::TwoStop); //2位停止位
break;
default:
serialPort->setStopBits(QSerialPort::UnknownStopBits);
break;
}
switch (ui->comboBoxParity->currentIndex()) {
case 0:
serialPort->setParity(QSerialPort::NoParity);  //无较验位
break;
case 1:
serialPort->setParity(QSerialPort::OddParity);  //奇较验位
break;
case 2:
serialPort->setParity(QSerialPort::EvenParity);  //偶较验位
break;
default:
break;
}
serialPort->setReadBufferSize(500);//设置数据缓冲区大小,以后可以写成宏的形式
//××××××××××××××××××××××××××设置默认串口参数××××××××××××××××××××××××××××××××//
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
ui->openButton->setText(tr("关闭"));
}
else
{
qDebug()<<serialPort->errorString();
this->statusBar()->showMessage(serialPort->errorString());
}
}
else  //如果串口处于打开的状态,则关闭
{
serialPort->close();
ui->openButton->setText(tr("打开"));
}
}
void MainWindow::on_sendButton_clicked()
{
QString str = ui->sendTextEdit->toPlainText();//获取要发送的内容
if(serialPort->isOpen())  //如果之前是没有打开的则进行open动作
{
if(ui->radioButtonTextS->isChecked())
{
//sendData = str.toLatin1();
QByteArray sendData = str.toUtf8();
qDebug() << "发送文本";
serialPort->write(sendData);
}else if(ui->radioButtonHexS->isChecked())
{
QByteArray str2 = QByteArray::fromHex (str.toLatin1().data());
qDebug() << "发送十六进制";
serialPort->write(str2);
}
}
}
void MainWindow::readyReadSlot() //接收数据槽函数
{
QByteArray arr = serialPort->readAll();
ui->receiveTextEdit->moveCursor(QTextCursor::EndOfLine);
if(ui->radioButtonTextR->isChecked())
{
ui->receiveTextEdit->insertPlainText(arr);
qDebug() << "接收文本";
}else if(ui->radioButtonHexR->isChecked())
{
qDebug() << "接收十六进制";
//ui->receiveTextEdit->toPlainText();
ui->receiveTextEdit->insertPlainText(arr.toHex());
}
//ui->receiveTextEdit->setText(arr);
//ui->receiveTextEdit->append(arr);
}
void MainWindow::on_pushButtonClearR_clicked()
{
ui->receiveTextEdit->clear();
}
void MainWindow::on_pushButtonClearS_clicked()
{
ui->sendTextEdit->clear();
}
 
本文永久更新地址:http://www.linuxdiyf.com/linux/23348.html