serialTransferTool/connectionSettingWidget.cpp

158 lines
4.7 KiB
C++

#include "connectionSettingWidget.h"
#include "ui_connectionSettingWidget.h"
#include "connectionManager.h"
#include <QSerialPortInfo>
#include <QDebug>
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<SerialConnection>();
}
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<SerialConnection>();
}
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, QString> &para)
{
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<SerialConnection> ConnectionSettingWidget::getConnection()
{
return serialConnection;
}
QMap<QString, QString> ConnectionSettingWidget::getParam()
{
QMap<QString,QString> 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<QString,QString> 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<QString,QString> 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 s1<s2;
}else{
return s1.size()<s2.size();
} });
ui->cmbCom->clear();
ui->cmbCom->addItems(nameList);
if(!currentTxt.isEmpty()){
ui->cmbCom->setCurrentText(currentTxt);
}
}