#include "dialoglogin.h" #include "ui_dialoglogin.h" #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include "appserial.h" #include "modbusrtu.h" #include #include #include #include DialogLogin::DialogLogin(QWidget *parent) : QDialog(parent) , ui(new Ui::DialogLogin) { ui->setupUi(this); qRegisterMetaType>("QList"); init(); serialInit(); mainwindowInit(); } DialogLogin::~DialogLogin() { delete ui; free(m_MainWindow); free(m_Serial); free(m_ModbusRTU); } void DialogLogin::init() { /* 设置标题 */ setWindowTitle("Login"); /* 设置Logo */ setWindowIcon(QIcon(":/Image/icon.png")); /* 隐藏Dialog问号按钮 */ setWindowFlags(Qt::WindowCloseButtonHint); /* 设置模态化,无法选中其他界面 */ setModal(true); /* 设置固定大小 */ // setFixedSize(260, 320); /* 实例化对象 */ m_MainWindow = new MainWindow; // m_MainWindow->show(); m_Serial = new AppSerial; m_Serial->setHWND((HWND)this->winId()); m_ModbusRTU = new ModbusRTU; ini = new QSettings("config.ini", QSettings::IniFormat); connect(ui->btnConnect, &QPushButton::clicked, this, &DialogLogin::slot_btnConnect_clicked); ui->groupBox->setStyleSheet("QGroupBox { border: none; }"); ui->label_bluesunLogo->setStyleSheet("QLabel { background-image: url(:/Image/bluesun.png); " "background-repeat: no-repeat; background-size: cover; background-position: center center;}"); // //将背景设置为白色 // ui->groupBox->setStyleSheet("background-color: #FFFFFF;"); m_MainWindow->setStyleSheet("background-color: #FFFFFF;"); // //传递BCU个数的信号与槽 // BCUNumbers = ui->comboBoxBCUQuantity->currentText().toInt(); // qDebug() << "the number of the BCU: " << BCUNumbers; // emit sendBCUNumberSignals(BCUNumbers); // connect(ui->comboBoxBCUQuantity, &QComboBox::currentTextChanged, m_MainWindow, [&]{ // BCUNumbers = ui->comboBoxBCUQuantity->currentText().toInt(); // emit sendBCUNumberSignals(BCUNumbers); // }); connect(this, &DialogLogin::sendBCUNumberSignals, m_MainWindow, &MainWindow::slot_getBcuNumberFromDialoglogin); //报文的信号与槽的连接 connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData, m_MainWindow, &MainWindow::slot_pageDebugDisplayMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_sgl_tempt, m_MainWindow, &MainWindow::slot_pageDebugDisplayMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info1_45, m_MainWindow, &MainWindow::slot_pageDebugDisplayMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info57_78, m_MainWindow, &MainWindow::slot_pageDebugDisplayMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info83_106, m_MainWindow, &MainWindow::slot_pageDebugDisplayMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData, m_MainWindow, &MainWindow::slot_pageHomeSglDataMessage); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_sgl_tempt, m_MainWindow, &MainWindow::slot_pageHomeSglTempt); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info1_45, m_MainWindow, &MainWindow::slot_pageHomeBaseInfo1_45); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info57_78, m_MainWindow, &MainWindow::slot_pageHomeBaseInfo57_78); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info83_106, m_MainWindow, &MainWindow::slot_pageHomeBaseInfo83_106); connect(m_ModbusRTU, &ModbusRTU::sig_showModbusData_base_info_list_47_49_51_53_55, m_MainWindow, &MainWindow::slot_pageHomeBaseInfo47_49_51_53_55); //写寄存器的信号与槽的连接 connect(m_MainWindow, &MainWindow::write_regs_signals, m_ModbusRTU, &ModbusRTU::write_regs_slot); //读寄存器的信号与槽的连接 connect(m_MainWindow, &MainWindow::read_regs_signals, m_ModbusRTU, &ModbusRTU::read_regs_slot); connect(m_ModbusRTU, &ModbusRTU::sig_showReadHoldingRegs, m_MainWindow, &MainWindow::slot_pageParaSetShow); //主窗口关闭时,关闭线程 connect(m_MainWindow, &MainWindow::quitThread, this, [=]{ qDebug() << "关闭线程"; m_ModbusRTU->quit(); }); connect(m_MainWindow, &MainWindow::closeThread, m_ModbusRTU, &ModbusRTU::slot_pauseThread); connect(m_MainWindow, &MainWindow::openThread, m_ModbusRTU, &ModbusRTU::slot_resumeThread); // ui->btnConnect->setStyleSheet("QPushButton { background-color: lightgray; color: black; border: none; }"); //主窗口接受语言选择number的信号与槽的连接 connect(this, &DialogLogin::sendLanNumberSignals, m_MainWindow, &MainWindow::getLanNumberSlot); //故障解析的信号与槽 connect(m_ModbusRTU, &ModbusRTU::sig_showFault, m_MainWindow, &MainWindow::slot_pageHomeFault); //电池界面中,点击bmu发送对应的数据 // connect(m_MainWindow, &MainWindow::read_regs_input_signals_vol, m_ModbusRTU, &ModbusRTU::read_regs_input_slot_vol); // connect(m_MainWindow, &MainWindow::read_regs_input_signals_temp, m_ModbusRTU, &ModbusRTU::read_regs_input_slot_temp); //上面的方法太low了,直接将row的索引传到modbus的线程中去 connect(m_MainWindow, &MainWindow::row_of_bmus_index, m_ModbusRTU, &ModbusRTU::change_BMUIndex_slot); // ui->btnConnect->setStyleSheet("QPushButton { background-color: #87CEFA; color: white; }" // "QPushButton:hover { background-color: #77B5D6; color: white; }"); // QMetaObject::invokeMethod(m_ModbusRTU,"read_regs_slot",Qt::QueuedConnection); // connect(m_ModbusRTU, &ModbusRTU::sig_readMoveToThread, m_ModbusRTU, &ModbusRTU::read_regs_slot, Qt::QueuedConnection); // thread = new QThread; // m_ModbusRTU->moveToThread(thread); // thread->start(); } void DialogLogin::serialInit() { connect(m_Serial, SIGNAL(comChangeStatus(QString,bool)), this, SLOT(slot_comChangeStatus(QString,bool))); if(ini->contains("Serial/SerialPort") == false || ini->contains("Serial/BaudRate") == false || ini->contains("Serial/DataBits") == false || ini->contains("Serial/StopBits") == false || ini->contains("Serial/Parity") == false || ini->contains("Serial/FlowControl") == false) { ui->comboBoxSerialPort->addItems(m_Serial->getAvailablePort()); ui->comboBoxBaudRate->setCurrentIndex(3); ui->comboBoxDataBits->setCurrentIndex(3); ui->comboBoxStopBits->setCurrentIndex(0); ui->comboBoxParity->setCurrentIndex(0); ui->comboBoxLanguage->setCurrentIndex(ini->value("System/Language").toUInt()); // qDebug() << "lan currentIndex false:" << ini->value("System/Language").toUInt(); } else { ui->comboBoxSerialPort->addItems(m_Serial->getAvailablePort()); ui->comboBoxBaudRate->setCurrentIndex(ini->value("Serial/BaudRate").toUInt()); ui->comboBoxDataBits->setCurrentIndex(ini->value("Serial/DataBits").toUInt()); ui->comboBoxStopBits->setCurrentIndex(ini->value("Serial/StopBits").toUInt()); ui->comboBoxParity->setCurrentIndex(ini->value("Serial/Parity").toUInt()); ui->comboBoxLanguage->setCurrentIndex(ini->value("System/Language").toUInt()); // ui->comboBoxLanguage->setCurrentIndex(ini->value()); // qDebug() << "lan currentIndex " << ini->value("System/Language").toUInt(); } } void DialogLogin::modbusRTUInit() { } void DialogLogin::mainwindowInit() { connect(m_MainWindow, &MainWindow::showLogin, this, [=]{ this->show(); }); // connect(this, &DialogLogin::finished, m_MainWindow, [=]{ // m_MainWindow->ui->btnSetup->setStyleSheet("#btnSetup{" // "background-image: url(:/Image/advance-set-line.png);" // "background-repeat: no-repeat;" // "background-position: center;" // "background-color: rgba(255, 255, 255, 0);" // "}" // "#btnSetup::hover{" // "background-image: url(:/Image/advance-set-line1.png);" // "background-repeat: no-repeat;" // "background-position: center;" // "background-color: rgba(255, 255, 255, 0);" // "}"); // }); // connect(m_MainWindow->ui->btnSetup, &QPushButton::pressed, this, [=]{ // qDebug() << __FUNCTION__ << "disconnected"; // m_ModbusRTU->isConnect = false; // m_MainWindow->statusBarConnectedIcon->setPixmap(QPixmap(QIcon(":/Image/connected1.png").pixmap(QSize(24, 24)))); // m_Serial->m_SerialPort->close(); // m_ModbusRTU->modbusRTUDisconnect(); // ui->comboBoxSerialPort->clear(); // ui->comboBoxSerialPort->addItems(m_Serial->getAvailablePort()); // }); } void DialogLogin::slot_comChangeStatus(QString name, bool flag) { Q_UNUSED(name); Q_UNUSED(flag); ui->comboBoxSerialPort->clear(); ui->comboBoxSerialPort->addItems(m_Serial->getAvailablePort()); } void DialogLogin::slot_btnConnect_clicked() { ini->setValue("Serial/BaudRate", ui->comboBoxBaudRate->currentIndex()); ini->setValue("Serial/DataBits", ui->comboBoxDataBits->currentIndex()); ini->setValue("Serial/StopBits", ui->comboBoxStopBits->currentIndex()); ini->setValue("Serial/Parity", ui->comboBoxParity->currentIndex()); ini->sync(); // BCUNumbers = ui->comboBoxBCUQuantity->currentText().toInt(); QString language = ui->comboBoxLanguage->currentText(); if (language == "English") { qDebug() << "ini lanuage index" << ini->value("System/Language"); ini->setValue("System/Language", 1); ini->sync(); QTranslator trans; emit sendLanNumberSignals(0); trans.load(":/Language/BatteryMonitor_ENG.qm"); QApplication::installTranslator(&trans); m_MainWindow->ui->retranslateUi(m_MainWindow); } else if (language == "Chinese") { qDebug() << "ini lanuage index" << ini->value("System/Language"); ini->setValue("System/Language", 0); ini->sync(); emit sendLanNumberSignals(1); QTranslator trans; trans.load(":/Language/BatteryMonitor_CHN.qm"); QApplication::installTranslator(&trans); m_MainWindow->ui->retranslateUi(m_MainWindow); } emit sendBCUNumberSignals(BCUNumbers); connect(this, &DialogLogin::sendBCUNumberSignals, m_MainWindow, &MainWindow::slot_getBcuNumberFromDialoglogin); if(m_Serial->getAvailablePort().size() == 0) { if(ini->value("System/Language") == MainWindow::LANGUAGE_ENG) { QMessageBox::critical(this, "Connect Filed", "No Available Serial"); } else if(ini->value("System/Language") == MainWindow::LANGUAGE_CHN) { QMessageBox::critical(this, "连接失败", "没有可用的串口"); } return; } else { int index = ui->comboBoxSerialPort->currentText().indexOf("("); QString portName = ui->comboBoxSerialPort->currentText().left(index); ini->setValue("Serial/SerialPort", portName); m_ModbusRTU->comPort = portName.toStdString().c_str(); m_Serial->m_SerialPort->setPortName(portName); if(ui->comboBoxBaudRate->currentText() == "1200") { m_ModbusRTU->baudRate = 1200; } else if(ui->comboBoxBaudRate->currentText() == "2400") { m_ModbusRTU->baudRate = 2400; } else if(ui->comboBoxBaudRate->currentText() == "4800") { m_ModbusRTU->baudRate = 4800; } else if(ui->comboBoxBaudRate->currentText() == "9600") { m_ModbusRTU->baudRate = 9600; } else if(ui->comboBoxBaudRate->currentText() == "19200") { m_ModbusRTU->baudRate = 19200; } else if(ui->comboBoxBaudRate->currentText() == "38400") { m_ModbusRTU->baudRate = 38400; } else if(ui->comboBoxBaudRate->currentText() == "57600") { m_ModbusRTU->baudRate = 57600; } else if(ui->comboBoxBaudRate->currentText() == "115200") { m_ModbusRTU->baudRate = 115200; } if(ui->comboBoxDataBits->currentText() == "5") { m_ModbusRTU->dataBit = 5; } else if(ui->comboBoxDataBits->currentText() == "6") { m_ModbusRTU->dataBit = 6; } else if(ui->comboBoxDataBits->currentText() == "7") { m_ModbusRTU->dataBit = 7; } else if(ui->comboBoxDataBits->currentText() == "8") { m_ModbusRTU->dataBit = 8; } if(ui->comboBoxStopBits->currentText() == "1") { m_ModbusRTU->stopBit = 1; } else if(ui->comboBoxStopBits->currentText() == "2") { m_ModbusRTU->stopBit = 2; } if(ui->comboBoxParity->currentText() == "None") { m_ModbusRTU->parity = 'N'; } else if(ui->comboBoxParity->currentText() == "Odd") { m_ModbusRTU->parity = 'O'; } else if(ui->comboBoxParity->currentText() == "Even") { m_ModbusRTU->parity = 'E'; } bool ret = m_ModbusRTU->modbusRTUConnect(m_ModbusRTU->comPort, m_ModbusRTU->baudRate, m_ModbusRTU->parity, m_ModbusRTU->dataBit, m_ModbusRTU->stopBit); if(ret == true) { qDebug() << __FUNCTION__ << "connected"; m_ModbusRTU->isConnect = true; m_MainWindow->statusBarConnectedIcon->setPixmap(QPixmap(QIcon(":/Image/connected2.png").pixmap(QSize(24, 24)))); m_MainWindow->show(); // m_MainWindow->showMaximized(); // m_ModbusRTU->start(); m_ModbusRTU->start(); m_MainWindow->showMaximized(); } else { if(ini->value("System/Language") == MainWindow::LANGUAGE_ENG) { QMessageBox::critical(this, "Connect Filed", "Serial prot cannot be opened please check and open it again\n" "1.Check USB-Serial is connected\n" "2.Check baud rate is set correctly\n" "3.Check whether the serial port is being used\n" "4.Check Modbus proto is true"); } else if(ini->value("System/Language") == MainWindow::LANGUAGE_CHN) { QMessageBox::critical(this, "连接失败", "当前串口号无法打开,请检查后重新打开\n" "1.检查USB串口工具是否连接上电脑\n" "2.检查波特率是否设置正确\n" "3.检查串口号是否被占用了\n" "4.检查Modbus通信协议是否有误"); } } this->close(); } }