#include "connectionSettingWidget.h" #include "ui_connectionSettingWidget.h" #include "connectionManager.h" #include #include ConnectionSettingWidget::ConnectionSettingWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ConnectionSettingWidget) { ui->setupUi(this); refreshComList(); ui->toolBtnConnectSerial->setText(tr("连接")); ui->toolBtnConnectTcp->setText(tr("连接")); serialConnection = std::make_shared(); } ConnectionSettingWidget::ConnectionSettingWidget(const QString &proto, QWidget *parent): QWidget(parent), ui(new Ui::ConnectionSettingWidget) { ui->setupUi(this); setProtocol(proto); refreshComList(); ui->toolBtnConnectSerial->setText(tr("连接")); ui->toolBtnConnectTcp->setText(tr("连接")); serialConnection = std::make_shared(); } ConnectionSettingWidget::~ConnectionSettingWidget() { if(serialConnection->isConnected()){ serialConnection->close(); } ConnectionManager::getInstance().remove(serialConnection); delete ui; } void ConnectionSettingWidget::setProtocol(const QString &proto) { protocol = proto; if(protocol=="TCP"){ ui->gpbTcp->setVisible(true); ui->gpbSerial->setVisible(false); }else{ ui->gpbTcp->setVisible(false); ui->gpbSerial->setVisible(true); } } void ConnectionSettingWidget::setParam(const QMap ¶) { QString proto = para.value("protocol",""); if(proto=="SERIAL"){ QString serialCom = para.value("serialCom",""); QString baud = para.value("baud",""); if(serialCom.isEmpty() || baud.isEmpty()){ return; } ui->cmbCom->setCurrentText(serialCom); if(ui->cmbCom->currentText()!=serialCom){ ui->cmbCom->addItem(serialCom); ui->cmbCom->setCurrentText(serialCom); } ui->cmbBaud->setCurrentText(baud); if(ui->cmbBaud->currentText()!=baud){ ui->cmbBaud->addItem(baud); ui->cmbBaud->setCurrentText(baud); } } setProtocol(proto); } bool ConnectionSettingWidget::isConnected() { if(protocol=="SERIAL"){ return bSerialConnected; } return false; } std::shared_ptr ConnectionSettingWidget::getConnection() { return serialConnection; } QMap ConnectionSettingWidget::getParam() { QMap paras; paras["protocol"] = protocol; if(protocol=="SERIAL"){ paras["serialCom"] = ui->cmbCom->currentText(); paras["baud"] = ui->cmbBaud->currentText(); } return paras; } void ConnectionSettingWidget::on_cmbCom_clicked() { refreshComList(); } void ConnectionSettingWidget::on_toolBtnConnectSerial_clicked() { if(!bSerialConnected){ if(serialConnection->isConnected()){ serialConnection->close(); } QMap paras; paras["serialCom"] = ui->cmbCom->currentText(); paras["baud"] = ui->cmbBaud->currentText(); serialConnection->setting(paras); bSerialConnected = serialConnection->open(); if(bSerialConnected){ ui->toolBtnConnectSerial->setText(tr("断开")); ui->toolBtnConnectSerial->setStyleSheet("color:red"); ui->cmbCom->setEnabled(false); ui->cmbBaud->setEnabled(false); ConnectionManager::getInstance().insert(serialConnection); } }else{ serialConnection->close(); bSerialConnected = false; QMap paras; paras["serialCom"] = ""; paras["baud"] = ui->cmbBaud->currentText(); serialConnection->setting(paras); ConnectionManager::getInstance().insert(serialConnection); ui->toolBtnConnectSerial->setText(tr("连接")); ui->toolBtnConnectSerial->setStyleSheet("color:green"); ui->cmbCom->setEnabled(true); ui->cmbBaud->setEnabled(true); } } void ConnectionSettingWidget::refreshComList() { QString currentTxt = ui->cmbCom->currentText(); QStringList nameList; foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) { nameList.append(info.portName()); } std::sort(nameList.begin(), nameList.end(), [&](QString &s1, QString &s2){ if(s1.size()==s2.size()){ return s1cmbCom->clear(); ui->cmbCom->addItems(nameList); if(!currentTxt.isEmpty()){ ui->cmbCom->setCurrentText(currentTxt); } }