384 lines
11 KiB
C++
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);
|
|
}
|
|
}
|