From bb2f8f310ff68d8dbef2eae3b778f5c5a2db66e3 Mon Sep 17 00:00:00 2001
From: mhvhm <1308784381@qq.com>
Date: Fri, 6 Sep 2024 00:34:31 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=95=8C=E9=9D=A2=E7=9A=84?=
=?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=BB=98=E5=88=B6=EF=BC=9B=E5=AE=8C=E6=88=90?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=BA=BF=E7=A8=8B=E5=92=8C=E5=B7=A5=E4=BD=9C?=
=?UTF-8?q?=E7=BA=BF=E7=A8=8B=E7=9A=84=E5=B0=8F=E9=83=A8=E5=88=86=E5=88=86?=
=?UTF-8?q?=E7=A6=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +
README.md | 15 +
SerialSynTool/SerialSynTool.pro | 11 +-
SerialSynTool/SerialSynTool.pro.user | 526 +++++++++++------------
SerialSynTool/mainwindow.cpp | 155 +++++++
SerialSynTool/mainwindow.h | 19 +
SerialSynTool/mainwindow.ui | 612 ++++++++++++++++++++++++++-
SerialSynTool/serialport.cpp | 46 ++
SerialSynTool/serialport.h | 45 ++
_src/SRC.qrc | 5 +
_src/img/refresh.png | Bin 0 -> 7208 bytes
11 files changed, 1150 insertions(+), 286 deletions(-)
create mode 100644 .gitignore
create mode 100644 SerialSynTool/serialport.cpp
create mode 100644 SerialSynTool/serialport.h
create mode 100644 _src/SRC.qrc
create mode 100644 _src/img/refresh.png
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1361e68
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+build-*
+.vscode
\ No newline at end of file
diff --git a/README.md b/README.md
index e69de29..420602e 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,15 @@
+
+
+| 更新时间 | 更新内容 |
+| ---------- | ------------------------------------------------------------ |
+| 2024-09-06 | 1. 完成界面的基本绘制
2. 完成部分ui线程和工作线程的分离
|
+| | |
+| | |
+
+
+
+
+
+# TODO
+
+- [2024-09-06] 创建了两个同类型变量,将两个变量的同一个槽函数绑定在同一个信号上,如何做到区分
\ No newline at end of file
diff --git a/SerialSynTool/SerialSynTool.pro b/SerialSynTool/SerialSynTool.pro
index 0086fd6..cdac8d9 100644
--- a/SerialSynTool/SerialSynTool.pro
+++ b/SerialSynTool/SerialSynTool.pro
@@ -1,4 +1,4 @@
-QT += core gui
+QT += core gui serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@@ -17,10 +17,12 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
- mainwindow.cpp
+ mainwindow.cpp \
+ serialport.cpp
HEADERS += \
- mainwindow.h
+ mainwindow.h \
+ serialport.h
FORMS += \
mainwindow.ui
@@ -29,3 +31,6 @@ FORMS += \
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+ ../_src/SRC.qrc
diff --git a/SerialSynTool/SerialSynTool.pro.user b/SerialSynTool/SerialSynTool.pro.user
index 9a13d87..6f939c9 100644
--- a/SerialSynTool/SerialSynTool.pro.user
+++ b/SerialSynTool/SerialSynTool.pro.user
@@ -1,6 +1,6 @@
-
+
EnvironmentId
@@ -58,6 +58,249 @@
ProjectExplorer.Project.Target.0
+
+ Desktop Qt 5.14.2 MinGW 64-bit
+ Desktop Qt 5.14.2 MinGW 64-bit
+ qt.qt5.5142.win64_mingw73_kit
+ 0
+ 0
+ 0
+
+ E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Debug
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+
+
+ E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Release
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+ false
+ true
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+
+
+ E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Profile
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ true
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+
+ 3
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+
+ -e
+ cpu-cycles
+ --call-graph
+ dwarf,4096
+ -F
+ 250
+
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+ Qt4ProjectManager.Qt4RunConfiguration:E:/Project/QT_Projects/SerialSynTool/SerialSynTool/SerialSynTool.pro
+ E:/Project/QT_Projects/SerialSynTool/SerialSynTool/SerialSynTool.pro
+
+ false
+
+ false
+ true
+ true
+ false
+ false
+ true
+
+ E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Debug
+
+ 1
+
+
+
+ ProjectExplorer.Project.Target.1
Desktop Qt 5.14.2 MSVC2015 64bit
Desktop Qt 5.14.2 MSVC2015 64bit
@@ -282,14 +525,14 @@
2
-
- ProjectExplorer.CustomExecutableRunConfiguration
-
+ Qt4ProjectManager.Qt4RunConfiguration:E:/Project/QT_Projects/SerialSynTool/SerialSynTool/SerialSynTool.pro
+ E:/Project/QT_Projects/SerialSynTool/SerialSynTool/SerialSynTool.pro
false
false
true
+ true
false
false
true
@@ -299,38 +542,8 @@
1
-
- ProjectExplorer.Project.Target.1
-
- Desktop Qt 5.14.2 MSVC2017 32bit
- Desktop Qt 5.14.2 MSVC2017 32bit
- qt.qt5.5142.win32_msvc2017_kit
- -1
- -1
- -1
- 0
- 0
-
- 0
-
-
ProjectExplorer.Project.Target.2
-
- Desktop Qt 5.14.2 MSVC2017 64bit
- Desktop Qt 5.14.2 MSVC2017 64bit
- qt.qt5.5142.win64_msvc2017_64_kit
- -1
- -1
- -1
- 0
- 0
-
- 0
-
-
-
- ProjectExplorer.Project.Target.3
Desktop Qt 5.14.2 MinGW 32-bit
Desktop Qt 5.14.2 MinGW 32-bit
@@ -572,252 +785,9 @@
1
-
- ProjectExplorer.Project.Target.4
-
- Desktop Qt 5.14.2 MinGW 64-bit
- Desktop Qt 5.14.2 MinGW 64-bit
- qt.qt5.5142.win64_mingw73_kit
- 0
- 0
- 0
-
- E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Debug
-
-
- true
- QtProjectManager.QMakeBuildStep
- true
-
- false
- false
- false
-
-
- true
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Debug
- Qt4ProjectManager.Qt4BuildConfiguration
- 2
-
-
- E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Release
-
-
- true
- QtProjectManager.QMakeBuildStep
- false
-
- false
- false
- true
-
-
- true
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Release
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
-
-
- E:/Project/QT_Projects/SerialSynTool/build-SerialSynTool-Desktop_Qt_5_14_2_MinGW_64_bit-Profile
-
-
- true
- QtProjectManager.QMakeBuildStep
- true
-
- false
- true
- true
-
-
- true
- Qt4ProjectManager.MakeStep
-
- false
-
-
- false
-
- 2
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
- true
- Qt4ProjectManager.MakeStep
-
- true
- clean
-
- false
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- Profile
- Qt4ProjectManager.Qt4BuildConfiguration
- 0
-
- 3
-
-
- 0
- Deploy
- Deploy
- ProjectExplorer.BuildSteps.Deploy
-
- 1
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
-
- dwarf
-
- cpu-cycles
-
-
- 250
-
- -e
- cpu-cycles
- --call-graph
- dwarf,4096
- -F
- 250
-
- -F
- true
- 4096
- false
- false
- 1000
-
- true
-
- false
- false
- false
- false
- true
- 0.01
- 10
- true
- kcachegrind
- 1
- 25
-
- 1
- true
- false
- true
- valgrind
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-
- 2
-
-
- ProjectExplorer.CustomExecutableRunConfiguration
-
-
- false
-
- false
- true
- false
- false
- true
-
-
-
- 1
-
-
ProjectExplorer.Project.TargetCount
- 5
+ 3
ProjectExplorer.Project.Updater.FileVersion
diff --git a/SerialSynTool/mainwindow.cpp b/SerialSynTool/mainwindow.cpp
index 41a26bd..312ef9d 100644
--- a/SerialSynTool/mainwindow.cpp
+++ b/SerialSynTool/mainwindow.cpp
@@ -1,11 +1,17 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
+
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
+
+ serial = new SerialPort[SERIAL_NUM];
+
+ UI_Init(); // 控件初始化
+ Singel_Init(); // 槽和信号的绑定
}
MainWindow::~MainWindow()
@@ -13,3 +19,152 @@ MainWindow::~MainWindow()
delete ui;
}
+/* @brief: UI控件初始化
+ * @para: void
+ * @return: void
+ */
+void MainWindow::UI_Init(void)
+{
+ // 串口端口数据刷新
+ for (uint8_t i = 0; i < SERIAL_NUM; i++)
+ {
+ SerialPortInfoRefresh(i);
+ }
+
+ // 表格表头
+ ui->tableWidget->setColumnCount(3); // 设置3列
+ ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 自适应列宽
+}
+
+/* @brief: 串口端口信息刷新
+ * @para: [uint8_t] serialIdx:串口序号
+ * @return:
+ */
+void MainWindow::SerialPortInfoRefresh(uint8_t serialIdx)
+{
+ QFont font;
+
+ // 清除上一次显示
+ if (serialIdx == SERIAL_1)
+ {
+ ui->comboBox_port_1->clear();
+ }
+ else if (serialIdx == SERIAL_2)
+ {
+ ui->comboBox_port_2->clear();
+ }
+
+ foreach (const QSerialPortInfo info, QSerialPortInfo::availablePorts())
+ {
+ switch(serialIdx)
+ {
+ case SERIAL_1:
+ {
+ if (info.isNull())
+ {
+ font = ui->comboBox_port_1->font();
+ font.setStrikeOut(true);
+ }
+ else
+ {
+ font = ui->comboBox_port_1->font();
+ font.setStrikeOut(false);
+ }
+ ui->comboBox_port_1->setFont(font);
+ ui->comboBox_port_1->addItem(info.portName() + "-" + info.description());
+ }break;
+ case SERIAL_2:
+ {
+ if (info.isNull())
+ {
+ font = ui->comboBox_port_2->font();
+ font.setStrikeOut(true);
+ }
+ else
+ {
+ font = ui->comboBox_port_2->font();
+ font.setStrikeOut(false);
+ }
+ ui->comboBox_port_2->setFont(font);
+ ui->comboBox_port_2->addItem(info.portName() + "-" + info.description());
+ }break;
+ default:
+ {
+ }break;
+ }
+ }
+}
+
+//==========================================================================<槽函数>
+/* @brief: 槽与信号的绑定
+ * @para:
+ * @return:
+ */
+void MainWindow::Singel_Init(void)
+{
+ connect(ui->pushButton_start_1, &QPushButton::clicked, this, PushButton_start_clicked_Callback); // 开始按键点击事件绑定
+ connect(ui->pushButton_start_2, &QPushButton::clicked, this, PushButton_start_clicked_Callback); // 开始按键点击事件绑定
+ connect(ui->pushButton_stop_1, &QPushButton::clicked, this, PushButton_stop_clicked_Callback); // 结束按键点击事件绑定
+ connect(ui->pushButton_stop_2, &QPushButton::clicked, this, PushButton_stop_clicked_Callback); // 结束按键点击事件绑定
+
+ connect(ui->pushButton_refresh_1, &QPushButton::clicked, this, PushButton_refresh_clicked_Callback); // 刷新按键点击事件绑定
+ connect(ui->pushButton_refresh_2, &QPushButton::clicked, this, PushButton_refresh_clicked_Callback); // 刷新按键点击事件绑定
+
+ connect(this, &MainWindow::Signal_Serial_Open, &serial[SERIAL_1], &SerialPort::SerialPort_OpenSerial_Callback);
+ connect(this, &MainWindow::Signal_Serial_Open, &serial[SERIAL_2], &SerialPort::SerialPort_OpenSerial_Callback);
+}
+
+/* @brief: 开启串口按键点击事件槽函数
+ * @para:
+ * @return:
+ */
+void MainWindow::PushButton_start_clicked_Callback(void)
+{
+ QPushButton* btn = qobject_cast(sender());
+ qDebug() << "<<<-----" << btn->objectName() << "Clicked ----->>>";
+
+ SERIAL_INFO info = {0};
+ if (btn == ui->pushButton_start_1)
+ {
+ info.portName = ui->comboBox_port_1->currentText().split('-').at(0); // 获取端口号
+ info.bandrate = ui->comboBox_band_1->currentText().toUInt(nullptr, 10);
+ info.timeOutCnt = ui->lineEdit_timeout_1->text().toUInt(nullptr, 10);
+ }
+ else if (btn == ui->pushButton_start_2)
+ {
+ info.portName = ui->comboBox_port_2->currentText().split('-').at(0);
+ info.bandrate = ui->comboBox_band_2->currentText().toInt(nullptr, 10);
+ info.timeOutCnt = ui->lineEdit_timeout_2->text().toUInt(nullptr, 10);
+ }
+
+ qDebug() << info.portName << info.bandrate << info.timeOutCnt;
+ emit Signal_Serial_Open(&info); // 发送信号
+}
+
+/* @brief: 关闭串口按键点击事件槽函数
+ * @para:
+ * @return:
+ */
+void MainWindow::PushButton_stop_clicked_Callback(void)
+{
+ QPushButton* btn = qobject_cast(sender());
+ qDebug() << "<<<-----" << btn->objectName() << "Clicked ----->>>";
+}
+
+/* @brief: 刷新键点击事件槽函数
+ * @para:
+ * @return:
+ */
+void MainWindow::PushButton_refresh_clicked_Callback(void)
+{
+ QPushButton* btn = qobject_cast(sender());
+ qDebug() << "<<<-----" << btn->objectName() << "Clicked ----->>>";
+ if (btn == ui->pushButton_refresh_1)
+ {
+ SerialPortInfoRefresh(1);
+ }
+ else if (btn == ui->pushButton_refresh_2)
+ {
+ SerialPortInfoRefresh(2);
+ }
+}
diff --git a/SerialSynTool/mainwindow.h b/SerialSynTool/mainwindow.h
index 4643e32..fe2f8e0 100644
--- a/SerialSynTool/mainwindow.h
+++ b/SerialSynTool/mainwindow.h
@@ -2,6 +2,10 @@
#define MAINWINDOW_H
#include
+#include
+#include
+
+#include "serialport.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@@ -15,7 +19,22 @@ public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
+ void UI_Init(void); // 控件初始化
+ void Singel_Init(void); // 槽初始化
+
+ void SerialPortInfoRefresh(uint8_t serialIdx); // 串口信息数据刷新
+
+private slots: // 槽函数
+ void PushButton_start_clicked_Callback(void); // 开始按键点击事件绑定
+ void PushButton_stop_clicked_Callback(void); // 结束按键点击事件绑定
+ void PushButton_refresh_clicked_Callback(void); // 刷新按键点击事件绑定
+
+signals: // 信号
+ void Signal_Serial_Open(SERIAL_INFO* info); // 开启串口信号
+ void Signal_Serial_Close(void); // 关闭串口信号
+
private:
Ui::MainWindow *ui;
+ SerialPort *serial;
};
#endif // MAINWINDOW_H
diff --git a/SerialSynTool/mainwindow.ui b/SerialSynTool/mainwindow.ui
index b232854..20d9af8 100644
--- a/SerialSynTool/mainwindow.ui
+++ b/SerialSynTool/mainwindow.ui
@@ -6,17 +6,619 @@
0
0
- 800
- 600
+ 1393
+ 920
MainWindow
-
-
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Maximum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 230
+
+
+
+ 配置
+
+
+
-
+
+
-
+
+
+ 10
+
+
-
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 超时时间(ms)
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 帧颜色
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ #FF0000
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 端口
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 20
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 波特率
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 2400
+
+
-
+
+ 2400
+
+
+ -
+
+ 4800
+
+
+ -
+
+ 9600
+
+
+ -
+
+ 115200
+
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+ image: url(:/img/img/refresh.png);
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 开始
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 暂停
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 318
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
-
+
+
+ 10
+
+
-
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 超时时间(ms)
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 20
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 波特率
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 端口
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 2400
+
+
-
+
+ 2400
+
+
+ -
+
+ 4800
+
+
+ -
+
+ 9600
+
+
+ -
+
+ 115200
+
+
+
+
+ -
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 帧颜色
+
+
+
+ -
+
+
+
+ 0
+ 25
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ #0000FF
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ 20
+ 20
+
+
+
+ image: url(:/img/img/refresh.png);
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 开始
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ font: 12pt "Adobe Arabic";
+
+
+ 暂停
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 318
+ 20
+
+
+
+
+
+
+
+ -
+
+
+ false
+
+
+
+ 时间戳
+
+
+
+
+ 数据
+
+
+
+
+ 解析
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Maximum
+
+
+
+ 10
+ 20
+
+
+
+
+
+
+
-
+
+
+
diff --git a/SerialSynTool/serialport.cpp b/SerialSynTool/serialport.cpp
new file mode 100644
index 0000000..650747a
--- /dev/null
+++ b/SerialSynTool/serialport.cpp
@@ -0,0 +1,46 @@
+#include "serialport.h"
+
+/* @brief: 构造函数
+ * @para:
+ * @return:
+ */
+SerialPort::SerialPort(QObject *parent) : QObject(parent)
+{
+ thread = new QThread(); // 创建线程句柄
+ serial = new QSerialPort(); // 创建串口句柄
+}
+
+/* @brief: 析构函数
+ * @para:
+ * @return:
+ */
+SerialPort::~SerialPort()
+{
+
+}
+
+//==========================================================================<槽函数>
+/* @brief: ui线程发送的打开串口的信号回调函数
+ * @para:
+ * @return:
+ */
+void SerialPort::SerialPort_OpenSerial_Callback(SERIAL_INFO* info)
+{
+ qDebug() << "<<<-----Serial Opened Succssfully ----->>>";
+ serial->setPortName(info->portName);
+ serial->setBaudRate(info->bandrate);
+ serial->setDataBits(QSerialPort::Data8);
+ serial->setStopBits(QSerialPort::OneStop); // 以为停止位
+ serial->setParity(QSerialPort::NoParity); // 无奇偶校验
+ serial->setFlowControl(QSerialPort::NoFlowControl); // 硬件控制
+
+ if(serial->open(QIODevice::ReadWrite))
+ {
+ serial->moveToThread(thread); // 加入线程
+ qDebug() << "<<<----- 串口打开成功,线程ID:" << serial->thread() << " ----->>>";; // 获取线程id
+ }
+ else
+ {
+ qDebug() << "串口打开失败";
+ }
+}
diff --git a/SerialSynTool/serialport.h b/SerialSynTool/serialport.h
new file mode 100644
index 0000000..14fcb32
--- /dev/null
+++ b/SerialSynTool/serialport.h
@@ -0,0 +1,45 @@
+#ifndef SERIALPORT_H
+#define SERIALPORT_H
+
+#include
+#include
+
+#include
+#include
+#include
+
+//==========================================================================
+typedef enum
+{
+ SERIAL_1,
+ SERIAL_2,
+ SERIAL_NUM,
+}SERIAL_IDX; // 串口编号
+
+typedef struct
+{
+ QString portName; // 端口号
+ uint32_t bandrate; // 波特率
+ uint32_t timeOutCnt; // 超时时间
+}SERIAL_INFO; // 串口信息
+
+
+
+class SerialPort : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SerialPort(QObject *parent = nullptr);
+ ~SerialPort();
+
+signals:
+
+public slots: // 槽函数
+ void SerialPort_OpenSerial_Callback(SERIAL_INFO* info);
+
+private:
+ QThread* thread;
+ QSerialPort* serial;
+};
+
+#endif // SERIALPORT_H
diff --git a/_src/SRC.qrc b/_src/SRC.qrc
new file mode 100644
index 0000000..a1f1b29
--- /dev/null
+++ b/_src/SRC.qrc
@@ -0,0 +1,5 @@
+
+
+ img/refresh.png
+
+
diff --git a/_src/img/refresh.png b/_src/img/refresh.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c139ef6c3108065ca2487401605bafff79749d7
GIT binary patch
literal 7208
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