#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("串口助手"));
//***************************串口接收程序**********************************//
// if (serialPort->waitForReadyRead(100)){
// // read request
// QByteArray requestData = serialPort->readAll();
// while (serialPort->waitForReadyRead(10))
// requestData += serialPort->readAll();
// qDebug()<<requestData;
// // write response
//// QByteArray responseData = currentRespone.toLocal8Bit();
//// serial.write(responseData);
//// if (serial.waitForBytesWritten(waitTimeout)) {
//// QString request(requestData);
//// emit this->request(request);
//// } else {
//// emit timeout(tr("Wait write response timeout %1")
//// .arg(QTime::currentTime().toString()));
//// }
// } else {
//// emit timeout(tr("Wait read request timeout %1")
//// .arg(QTime::currentTime().toString()));
// }
//***************************串口接收程序**********************************//
}
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(),QSerialPort::AllDirections);
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();
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt版串口调试助手
共8个文件
cpp:2个
5ffcdff:1个
pro:1个
5星 · 超过95%的资源 需积分: 48 218 下载量 109 浏览量
2016-09-02
16:06:43
上传
评论 5
收藏 29KB ZIP 举报
温馨提示
Qt版本的串口调试助手,开发环境Qt5.6.1,windows和ubuntu两者都可以例用(验证),是基于Qt自带的串口类实现的。希望对和我一样的初学者有帮助。效果还不错,可以用噢,欢迎交流。
资源详情
资源评论
资源推荐
收起资源包目录
SerialPort.zip (8个子文件)
SerialPort
SerialPort.pro 374B
SerialPort.pro.user 23KB
mainwindow.cpp 6KB
mainwindow.h 540B
QQ截图20160815114807.jpg 30KB
main.cpp 172B
mainwindow.ui 8KB
SerialPort.pro.user.5ffcdff 43KB
共 8 条
- 1
maowendi
- 粉丝: 166
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4