Files
2026-02-01 22:23:06 +08:00

384 lines
11 KiB
C++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
static const char blankString[] = QT_TRANSLATE_NOOP("MainWindow", "N/A");
MainWindow::MainWindow(QWidget* parent, ToolkitBase_Interface* pBaseInterface)
: QMainWindow(parent)
, m_pBaseInterface(pBaseInterface)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->statusBar()->hide();
// 串口初始化
{
m_pSeriaPortScan = new SerialPortScan();
m_pSeriaPortScan->ScanStart();
m_timer.start(1000);
FillPortsParameters();
FillPortsInfo();
}
// 串口
{
}
//
{
/*
connect(ui->m_pushButton_LocationCalculate, &QPushButton::clicked, this, [&]()
{
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->m_pushButton_LocationDebug, &QPushButton::clicked, this, [&]()
{
ui->stackedWidget->setCurrentIndex(1);
});
*/
}
InitStyles();
/*
*MQTT初始化
*/
{
m_pMQTTOpenration = new MQTTOpenration();
}
// connect
{
LoadConnect();
}
}
MainWindow::~MainWindow()
{
// connect
{
disconnect(ui->m_pushButton_OpenOrCloseSerialPort, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
}
delete ui;
}
void MainWindow::sltMQTTMessage(QString strTopic, QString strMessage)
{
}
void MainWindow::sltMQTTMessage(QString strTopic, QByteArray arrayMessage)
{
}
void MainWindow::sltMQTTSubcribe(QString strTopic)
{
m_pMQTTOpenration->Subcribe(strTopic);
}
void MainWindow::sltMQTTCancelTopic(QString strTopic)
{
m_pMQTTOpenration->UnSubcribe(strTopic);
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent* event)
{
if (nullptr != m_pBaseInterface)
{
m_pBaseInterface->OnNotify(1);
}
}
void MainWindow::InitStyles()
{
QString fileName = ":/skin/qss/psblack.css";
if (!fileName.isEmpty())
{
QFile file(fileName);
if (file.open(QFile::ReadOnly))
{
QString str = file.readAll();
this->setStyleSheet(str);
}
}
}
void MainWindow::LoadConnect()
{
connect(ui->m_pushButton_OpenOrCloseSerialPort, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->pushButton_ConnectMqtt, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
QObject::connect(ui->m_comboBox_SerialPort, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this](int index)
{
OnSerialPortComboxCurIndexChanged(index);
});
}
void MainWindow::ShowMsg(QString title, QString msg)
{
QMessageBox msgBox(QMessageBox::Icon::Warning, title, msg);
QColor parentBgColor = this->palette().color(QWidget::backgroundRole());
QString styleSheet = QString(
"QMessageBox {"
" background-color: %1;"
" color: %2;"
"}"
"QMessageBox QLabel {"
" color: %2;"
"}"
"QMessageBox QPushButton {"
" background-color: palette(button);"
" border: 1px solid #8f8f91;"
" border-radius: 4px;"
" padding: 6px 12px;"
"}"
"QMessageBox QPushButton:hover {"
" background-color: palette(light);"
"}"
"QMessageBox QPushButton:pressed {"
" background-color: palette(dark);"
"}"
).arg(parentBgColor.name())
.arg(this->palette().color(QPalette::WindowText).name());
msgBox.setStyleSheet(styleSheet);
msgBox.exec();
}
void MainWindow::FillPortsParameters()
{
ui->m_comboBox_BaudRate->addItem(QStringLiteral("19200"), 19200);
ui->m_comboBox_BaudRate->addItem(QStringLiteral("38400"), 38400);
ui->m_comboBox_BaudRate->setCurrentIndex(1);
//
ui->m_comboBox_Parity->addItem(tr("None"), asio::serial_port::parity::type::none);
ui->m_comboBox_Parity->addItem(tr("Even"), asio::serial_port::parity::type::even);
ui->m_comboBox_Parity->addItem(tr("Odd"), asio::serial_port::parity::type::odd);
ui->m_comboBox_Parity->setCurrentIndex(0);
//
ui->m_comboBox_DataBits->addItem(QStringLiteral("5"), 5);
ui->m_comboBox_DataBits->addItem(QStringLiteral("6"), 6);
ui->m_comboBox_DataBits->addItem(QStringLiteral("7"), 7);
ui->m_comboBox_DataBits->addItem(QStringLiteral("8"), 8);
ui->m_comboBox_DataBits->setCurrentIndex(3);
ui->m_comboBox_StopBits->addItem(QStringLiteral("1"), asio::serial_port::stop_bits::type::one);
#ifdef Q_OS_WIN
ui->m_comboBox_StopBits->addItem(tr("1.5"), asio::serial_port::stop_bits::type::onepointfive);
#endif
ui->m_comboBox_StopBits->addItem(QStringLiteral("2"), asio::serial_port::stop_bits::type::two);
ui->m_comboBox_StopBits->setCurrentIndex(0);
ui->m_comboBox_FlowControl->addItem(tr("None"), asio::serial_port::flow_control::none);
ui->m_comboBox_FlowControl->addItem(tr("Software"), asio::serial_port::flow_control::software);
ui->m_comboBox_FlowControl->addItem(tr("Hardware"), asio::serial_port::flow_control::hardware);
ui->m_comboBox_FlowControl->setCurrentIndex(0);
}
void MainWindow::FillPortsInfo()
{
ui->m_comboBox_SerialPort->clear();
connect(&m_timer, &QTimer::timeout, [this]()
{
foreach(QString name, m_pSeriaPortScan->oldPortStringList)
{
if (!m_portNameList.contains(name))
{
m_portNameList.append(name);
ui->m_comboBox_SerialPort->addItem(name);
}
}
});
}
void MainWindow::UpdateSettings()
{
// 串口名
m_varSerialPortSettings.name = ui->m_comboBox_SerialPort->currentText();
// 波特率
m_varSerialPortSettings.baudRate = asio::serial_port::baud_rate(ui->m_comboBox_BaudRate->currentText().toInt());
m_varSerialPortSettings.strBaudRate = QString::number(m_varSerialPortSettings.baudRate.value());
// 奇偶校验
m_varSerialPortSettings.parity = asio::serial_port::parity((asio::serial_port::parity::type)
ui->m_comboBox_Parity->itemData(ui->m_comboBox_Parity->currentIndex()).toInt());
m_varSerialPortSettings.strParity = ui->m_comboBox_Parity->currentText();
// 流控制
m_varSerialPortSettings.flowControl = asio::serial_port::flow_control((asio::serial_port::flow_control::type)
ui->m_comboBox_FlowControl->itemData(ui->m_comboBox_FlowControl->currentIndex()).toInt());
m_varSerialPortSettings.strFlowControl = ui->m_comboBox_FlowControl->currentText();
// 数据位
m_varSerialPortSettings.dataBits = asio::serial_port::character_size(
ui->m_comboBox_DataBits->itemData(ui->m_comboBox_DataBits->currentIndex()).toInt());
m_varSerialPortSettings.strDataBits = ui->m_comboBox_DataBits->currentText();
// 停止位
m_varSerialPortSettings.stopBits = asio::serial_port::stop_bits((asio::serial_port::stop_bits::type)
ui->m_comboBox_StopBits->itemData(ui->m_comboBox_StopBits->currentIndex()).toInt());
m_varSerialPortSettings.strStopBits = ui->m_comboBox_StopBits->currentText();
}
void MainWindow::OnButtonClicked()
{
if (sender() == ui->m_pushButton_OpenOrCloseSerialPort)
{
int index = ui->m_comboBox_SerialPort->currentIndex();
UpdateSettings();
// std::shared_ptr<serial_port> ptrPort = m_ptrSerialPortList.value(index);
// bool isopen = false;
//
// if (!isopen || (ptrPort == nullptr))
// {
// boost::system::error_code ec;
// io_context varIoContext;
// ptrPort = std::shared_ptr<serial_port>(new serial_port(varIoContext));
// varIoContext.run();
// //ptrPort->open(m_varSerialPortSettings.name);
// m_ptrSerialPortList.insert(index, ptrPort);
// if (!ptrPort->is_open())
// {
//
// return;
// }
// else
// {
// ptrPort->open(m_varSerialPortSettings.name.toStdString(), ec);
// //
// ptrPort->set_option(m_varSerialPortSettings.baudRate);
// ptrPort->set_option(m_varSerialPortSettings.parity);
// ptrPort->set_option(m_varSerialPortSettings.flowControl);
// ptrPort->set_option(m_varSerialPortSettings.dataBits);
// ptrPort->set_option(m_varSerialPortSettings.stopBits);
// // 点亮图标
// ui->m_label_ConnectFlag->setPixmap(QPixmap(":/image/connect.png"));
// ui->m_label_ConnectFlag->setScaledContents(true);
// //
// ui->m_comboBox_SerialPort->setEnabled(false);
// ui->m_comboBox_BaudRate->setEnabled(false);
// ui->m_comboBox_Parity->setEnabled(false);
// ui->m_comboBox_FlowControl->setEnabled(false);
// ui->m_comboBox_DataBits->setEnabled(false);
// ui->m_comboBox_StopBits->setEnabled(false);
// }
// }
//
// //
// ui->m_pushButton_OpenOrCloseSerialPort->setText("关闭串口");
//
//
//
// //else
// {
// //
// if (isopen)
// {
// m_ptrSerialPortList.value(index)->close();
// }
// // 熄灭图标
// ui->m_label_ConnectFlag->setPixmap(QPixmap(":/image/disconnect.png"));
// ui->m_label_ConnectFlag->setScaledContents(true);
// //
// ui->m_comboBox_SerialPort->setEnabled(true);
// ui->m_comboBox_BaudRate->setEnabled(true);
// ui->m_comboBox_Parity->setEnabled(true);
// ui->m_comboBox_FlowControl->setEnabled(true);
// ui->m_comboBox_DataBits->setEnabled(true);
// ui->m_comboBox_StopBits->setEnabled(true);
// //
// ui->m_pushButton_OpenOrCloseSerialPort->setText("打开串口");
// }
//}
//else if (sender() == ui->pushButton_ConnectMqtt)
//{
// if (ui->pushButton_ConnectMqtt->text() == "连接服务器")
// {
// QString ip = ui->lineEdit_mqttServerIP->text();
// int port = ui->lineEdit_mqttServerPort->text().toInt();
// if (m_pMQTTOpenration && !m_pMQTTOpenration->IsOpen())
// {
// QByteArray qbIP = ip.toUtf8();
// if (m_pMQTTOpenration->Open(qbIP.data(), port))
// {
// m_bMQTTisOpen = true;
// /*ui->lineEdit_mqttServerIP->setEnabled(false);
// ui->lineEdit_mqttServerPort->setEnabled(false);*/
// ui->pushButton_ConnectMqtt->setText("断开服务器");
// QString str;
// str += ("background-color: rgb(85, 255, 0);");
// str += ("color: rgb(0, 0, 0);");
// ui->pushButton_ConnectMqtt->setStyleSheet(str);
// //InitMQTTtopic();//订阅
// //Test
// //QByteArray ba("hello");
// //m_pMQTTOpenration->PublishDataByMQTT("ins/RPC_Request/system",ba);
// }
// }
// }
// else
// {
// m_pMQTTOpenration->Close();
// ui->pushButton_ConnectMqtt->setText("连接服务器");
// QString str = "";
// ui->pushButton_ConnectMqtt->setStyleSheet(str);
// /*ui->lineEdit_mqttServerIP->setEnabled(true);
// ui->lineEdit_mqttServerPort->setEnabled(true);*/
// }
}
}
void MainWindow::OnSerialPortComboxCurIndexChanged(int index)
{
bool isopen = false;
//SerialPort *sp = m_ptrSerialPortList.value(index);
//if (ptrPort != nullptr)
{
QString buttonTxt = ui->m_pushButton_OpenOrCloseSerialPort->text();
if (isopen)
{
ShowMsg("提示", "串口已打开");
ui->m_pushButton_OpenOrCloseSerialPort->setText("关闭串口");
// 点亮图标
ui->m_label_ConnectFlag->setPixmap(QPixmap(":/image/connect.png"));
ui->m_label_ConnectFlag->setScaledContents(true);
}
else
{
ui->m_pushButton_OpenOrCloseSerialPort->setText("打开串口");
// 熄灭图标
ui->m_label_ConnectFlag->setPixmap(QPixmap(":/image/disconnect.png"));
ui->m_label_ConnectFlag->setScaledContents(true);
}
}
//else
{
ui->m_pushButton_OpenOrCloseSerialPort->setText("打开串口");
// 熄灭图标
ui->m_label_ConnectFlag->setPixmap(QPixmap(":/image/disconnect.png"));
ui->m_label_ConnectFlag->setScaledContents(true);
}
}