qt串口调试助手
2017-09-01 15:12
99 查看
#------------------------------------------------- # # Project created by QtCreator 2017-09-01T13:29:03 # #------------------------------------------------- QT += core gui serialport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = uartassistant TEMPLATE = app SOURCES += main.cpp\ dialog.cpp HEADERS += dialog.h FORMS += dialog.ui
==============================================================================================
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QSerialPortInfo> #include <QSerialPort> #include <QDebug> #include <QList> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); public: bool getSerialPortConfig(void); private slots: // void on_CBoxSerailPort_currentIndexChanged(const QString &arg1); void on_BtnOpen_clicked(); void on_BtnSend_clicked(); void on_SerialPort_readyRead(); private: Ui::Dialog *ui; QSerialPort mSerialPort; bool mIsOpen; QString mPortName; QString mBaudRate; QString mParity; QString mDataBits; QString mStopBits; }; #endif // DIALOG_H
======================================================================================#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); mIsOpen = false; //智能识别当前系统的有效串口号 QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts(); int count = serialPortInfo.count(); for (int i=0; i<count; i++) { ui->CBoxSerailPort->addItem(serialPortInfo.at(i).portName()); } // ui->CBoxSerailPort->addItem("COM4"); // ui->CBoxSerailPort->addItem("COM5"); // ui->CBoxSerailPort->addItem("COM6"); // ui->CBoxSerailPort->addItem("COM7"); // ui->CBoxSerailPort->addItem("COM8"); // ui->CBoxSerailPort->addItem("COM9"); /* mSerialPort.setPortName("COM1"); mSerialPort.setBaudRate(QSerialPort::Baud115200); mSerialPort.setParity(QSerialPort::NoParity); mSerialPort.setDataBits(QSerialPort::Data8); mSerialPort.setStopBits(QSerialPort::OneStop); mSerialPort.open(QSerialPort::ReadWrite); if (mSerialPort.isOpen()) { qDebug() << "串口打开成功"; mSerialPort.write("hello world!"); } */ connect(&mSerialPort, SIGNAL(readyRead()), this, SLOT(on_SerialPort_readyRead())); } Dialog::~Dialog() { delete ui; } bool Dialog::getSerialPortConfig() { //获取串口配置 mPortName = ui->CBoxSerailPort->currentText(); mBaudRate = ui->CboxBaudRate->currentText(); mParity = ui->CboxParity->currentText(); mDataBits = ui->CboxDataBits->currentText(); mStopBits = ui->CboxStopBits->currentText(); //设置串口配置 //端口号 mSerialPort.setPortName(mPortName); //波特率 if ("9600" == mBaudRate) { mSerialPort.setBaudRate(QSerialPort::Baud9600); } else if ("19200" == mBaudRate) { mSerialPort.setBaudRate(QSerialPort::Baud19200); } else { mSerialPort.setBaudRate(QSerialPort::Baud115200); } //校验位 if ("NONE" == mParity) { mSerialPort.setParity(QSerialPort::NoParity); } else if ("ODD" == mParity) { mSerialPort.setParity(QSerialPort::OddParity); } else { mSerialPort.setParity(QSerialPort::EvenParity); } //数据位 if ("5" == mDataBits) { mSerialPort.setDataBits(QSerialPort::Data5); } else if ("6" == mDataBits) { mSerialPort.setDataBits(QSerialPort::Data6); } else if ("7" == mDataBits) { mSerialPort.setDataBits(QSerialPort::Data7); } else { mSerialPort.setDataBits(QSerialPort::Data8); } //停止位 if ("1.5" == mStopBits) { mSerialPort.setStopBits(QSerialPort::OneAndHalfStop); } if ("2" == mStopBits) { mSerialPort.setStopBits(QSerialPort::TwoStop); } else { mSerialPort.setStopBits(QSerialPort::OneStop); } return mSerialPort.open(QSerialPort::ReadWrite); } /* void Dialog::on_CBoxSerailPort_currentIndexChanged(const QString &arg1) { ui->LbSerialPort->setText(arg1); } */ void Dialog::on_BtnOpen_clicked() { if (mIsOpen) { //当前串口助手已经打开了一个串口这时要执行关闭动作 mSerialPort.close(); ui->BtnOpen->setText("打开"); mIsOpen = false; ui->CBoxSerailPort->setEnabled(true); ui->CboxBaudRate->setEnabled(true); ui->CboxParity->setEnabled(true); ui->CboxDataBits->setEnabled(true); ui->CboxStopBits->setEnabled(true); } else { //当前串口助手没有打开串口,要执行打开动作 if (getSerialPortConfig()) { mIsOpen = true; ui->BtnOpen->setText("关闭"); qDebug() << "成功打开串口" << mPortName; ui->CBoxSerailPort->setEnabled(false); ui->CboxBaudRate->setEnabled(false); ui->CboxParity->setEnabled(false); ui->CboxDataBits->setEnabled(false); ui->CboxStopBits->setEnabled(false); } // else // { // mIsOpen = false; // } } } void Dialog::on_BtnSend_clicked() { if (mIsOpen) { mSerialPort.write(ui->TeditSend->toPlainText().toStdString().c_str()); } } void Dialog::on_SerialPort_readyRead() { if (mIsOpen) { QByteArray recvData = mSerialPort.readAll(); ui->TeditRecv->append(QString(recvData)); } }
============================================================================#include "dialog.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog w; w.show(); return a.exec(); }
相关文章推荐
- Qt实现QUI皮肤生成器
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt 中调用cmd不显示窗口
- 设置qt中窗口的显示范围
- qt 制作含多个控件的列表
- QT开发应用程序的欢迎界面实例
- 浅谈Qt中使用CEF的几个要点(Windows下)
- 深入理解Qt中各种消息框对话框的使用
- Windows 环境下使用 Qt 连接 MySQL
- QT网络编程UDP下C/S架构广播通信(实例讲解)
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- C++ Qt属性系统详细介绍
- Qt for Android开发实例教程
- Qt如何设置窗口屏幕居中显示以及设置大小
- Qt实现FTP的上传和下载的实例代码
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel