#include "mainwindow.h"
#include <QWindow>
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//窗口初始化
ui->adjustable_splitter->setStretchFactor(0, 1); //设置水平分裂器比例
serial = new QSerialPort;
ScanPort();
SetComPort();
//ui->statusBar->setStyleSheet("QStatusBar{background-color:#3a9aeb;}");
for (int i = 0; i < 9; i++)
{
ui->BaudRate->addItem(QString::number(baud_val[i]));
}
//Json解析
QFile file("config.json");
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString config_str = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(config_str.toUtf8(),&parseJsonErr);
if(!(parseJsonErr.error == QJsonParseError::NoError))
{
ui->set_flow_ctrl->setCurrentIndex(FC_index);
ui->set_data_bits->setCurrentIndex(DB_index);
ui->set_parity_bits->setCurrentIndex(PA_index);
ui->set_stop_bits->setCurrentIndex(SB_index);
ui->font_size->setValue(15);
ui->clear_aftersend->setChecked(true);
ui->is_send_return->setChecked(false);
ui->isShowTime->setChecked(false);
ui->BaudRate->setCurrentText("9600");
ui->duplicate_allowed->setChecked(false);
ui->isTop->setChecked(false);
}
else
{
config = document.object();
ui->set_flow_ctrl->setCurrentIndex(config["FlowContral"].toInt());
ui->set_data_bits->setCurrentIndex(config["DataBits"].toInt());
ui->set_parity_bits->setCurrentIndex(config["Parity"].toInt());
ui->set_stop_bits->setCurrentIndex(config["StopBits"].toInt());
ui->font_size->setValue(config["FontSize"].toInt());
ui->clear_aftersend->setChecked(config["ClearAfterSend"].toBool());
ui->is_send_return->setChecked(config["SendReturn"].toBool());
ui->isShowTime->setChecked(config["isShowTime"].toBool());
ui->BaudRate->setCurrentText(config["BaudRate"].toString());
ui->duplicate_allowed->setChecked(config["DuplicateAllowed"].toBool());
add_blank = config["AddBlank"].toInt();
ui->isTop->setChecked(config["isTop"].toBool());
}
init = 1;
SetFontSize();
ConfigPort();
BaudRate();
if (ui->isTop->isChecked())
{
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
}
else
{
setWindowFlags(windowFlags());
}
init = 0;
ui->statusBar->showMessage("就绪");
//链接槽和信号
connect(ui->refrush, &QPushButton::clicked, this, &MainWindow::ScanPort);
connect(ui->Send_btn, &QPushButton::clicked, this, &MainWindow::SendData);
connect(ui->port_list, &QComboBox::currentTextChanged, this, &MainWindow::SetComPort);
connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReceiveData);
connect(ui->operate_port, &QAction::triggered, this, &MainWindow::OperatePort);
connect(ui->msg, &QTextEdit::textChanged, this, &MainWindow::SeeBottom);
connect(ui->BaudRate, &QComboBox::currentTextChanged, this, &MainWindow::BaudRate);
connect(ui->save_msg, &QAction::triggered, this, &MainWindow::SaveMessage);
connect(ui->operate_port_btn, &QPushButton::clicked, this, &MainWindow::OperatePort);
connect(ui->font_size, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::SetFontSize);
connect(ui->set_data_bits, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &MainWindow::ConfigPort);
connect(ui->set_flow_ctrl, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &MainWindow::ConfigPort);
connect(ui->set_stop_bits, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &MainWindow::ConfigPort);
connect(ui->set_parity_bits, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &MainWindow::ConfigPort);
connect(ui->isTop, &QCheckBox::clicked, this, &MainWindow::ChangeTopState);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::ScanPort()
{
ui->statusBar->setStyleSheet("QStatusBar{background-color:#3a9aeb;}");
ui->port_list->clear();
m_serialPortName.clear();
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
m_serialPortName << info.portName();
}
ui->port_list->addItems(m_serialPortName);
if (ui->port_list->count() != 0)
{
ui->operate_port_btn->setEnabled(true);
ui->operate_port->setEnabled(true);
}
}
void MainWindow::SendData()
{
QString data = ui->message->text();
QString data_cpy = data;
if (!add_blank)
data_cpy.remove(QRegExp("\\s")); //去除字符串内的全部空格,注释此行,添加全是空格的项
if (!data_cpy.isEmpty())
{
if (ui->duplicate_allowed->isChecked())
{
int found = 0;
for(int i = 0; i < ui->msg_history->count(); i++)
{
if (ui->msg_history->item(i)->text() == data)
{
found = 1;
break;
}
}
if (!found)
{
ui->msg_history->addItem(data);
ui->msg_history->scrollToBottom();
}
}
else
{
ui->msg_history->addItem(data);
ui->msg_history->scrollToBottom();
}
}
if (serial->isOpen())
{
if (ui->is_send_return->isChecked())
{
data += "\r\n";
}
serial->write(data.toUtf8().data());
}
else
{
ui->statusBar->showMessage("发送失败,串口未打开");
}
if (ui->clear_aftersend->isChecked())
{
ui->message->clear();
}
return;
}
void MainWindow::ReceiveData()
{
QString data_str;
data_str += (QString)serial->readAll();
if (isInsertN && ui->isShowTime->isChecked())
{
isInsertN = 0;
data_str.insert(0, QDateTime::currentDateTime().toString("hh:mm:ss.zzz") + " -> ");
}
if (ui->isShowTime->isChecked())
{
//data_str = QDateTime::currentDateTime().toString("|hh:mm:ss.zzz") + " -> ";
for (int i = 0; i < data_str.length(); i++)
{
if (data_str[i] == '\n' && i != data_str.length() - 1)
{
data_str.insert(i + 1, QDateTime::currentDateTime().toString("hh:mm:ss.zzz") + " -> ");
}
else if (data_str[i] == '\n' && i == data_str.length() - 1)
{
isInsertN = 1;
}
}
}
ui->msg->insertPlainText(data_str);
}
void MainWindow::SetComPort()
{
if (ui->port_list->count() == 0)
{
ui->statusBar->setStyleSheet("QStatusBar{background-color:#3a9aeb;}");
ui->operate_port_btn->setEnabled(false);
ui->operate_port->setEnabled(false);
ui->operate_port_btn->setText("没有串口");
ui->operate_port->setText("没有串口");
return;
}
serial->close();
serial->setPortName(ui->port_list->currentText());
ui->statusBar->showMessage("当前串口为:" + ui->port_list->currentText());
serial->open(QIODevice::ReadWrite);
if (serial->isOpen())
{
ui->statusBar->setStyleSheet("QStatusBar{background-color:#35ac00;}");
ui->operate_port->setIcon(QIcon(":/pic/port_close"));
ui->operate_port->setText("关闭串口");
ui->operate_port_btn->setIcon(QIcon(":/pic/port_close"));
ui->operate_port_btn->setText("关闭串口");
//serial->open(QIODevice::ReadWrite);
}
else
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip基于Qt框架和c++实现的串口监视器源码(课程作业).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt框架和c++实现的串口监视器源码(课程作业).zip (18个子文件)
介绍.md 170B
SerialMonitor
app.rc 50B
pic
port_open.png 10KB
port_close.png 4KB
refrush.png 8KB
send.png 11KB
exit.png 4KB
clear.png 8KB
app_logo.png 7KB
save.png 4KB
history.png 9KB
app_logo.ico 162KB
mainwindow.h 3KB
mainwindow.cpp 14KB
main.cpp 183B
picture.qrc 398B
SerialMonitor.pro 1KB
mainwindow.ui 16KB
共 18 条
- 1
资源评论
Make程序设计
- 粉丝: 5725
- 资源: 3570
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功