You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
VideoClient98/src/communicationsettingdlg.cpp

215 lines
6.6 KiB
C++

#include "communicationsettingdlg.h"
#include "ui_communicationsettingdlg.h"
CommunicationSettingDlg::CommunicationSettingDlg(QWidget *parent)
: QDialog(parent), ui(new Ui::CommunicationSettingDlg) {
ui->setupUi(this);
this->setWindowTitle("通信设置");
initCombobox();
initNetworkSetting();
}
CommunicationSettingDlg::~CommunicationSettingDlg() {
delete ui;
}
void CommunicationSettingDlg::showEvent(QShowEvent *event) {
setSaveSettingParms();
setPodIniSetting();
}
bool CommunicationSettingDlg::isValidIP()
{
QHostAddress addrLocal(ui->podLocalIP->currentText());
QHostAddress addrremote(ui->podRemoteIPEdit->text());
if (addrLocal.isNull() || addrLocal.protocol() != QAbstractSocket::IPv4Protocol)
{
emit sendErrorMessage("本地IP格式错误!", 2);
return false;
}
if (addrremote.isNull() || addrremote.protocol() != QAbstractSocket::IPv4Protocol)
{
emit sendErrorMessage("远端IP格式错误!", 2);
return false;
}
if (ui->podLocalPort->value() == 0 || ui->podRemotePort->value() == 0)
{
emit sendErrorMessage("请输入正确的端口号!", 2);
return false;
}
return true;
}
void CommunicationSettingDlg::savePodIniSetting()
{
g_networkSettingInfo->setValue("PodSetting/localIP",
ui->podLocalIP->currentText());
g_networkSettingInfo->setValue("PodSetting/remoteIP",
ui->podRemoteIPEdit->text());
g_networkSettingInfo->setValue("PodSetting/localPort",
ui->podLocalPort->value());
g_networkSettingInfo->setValue("PodSetting/remotePort",
ui->podRemotePort->value());
}
void CommunicationSettingDlg::setPodIniSetting()
{
ui->podRemoteIPEdit->setText(
g_networkSettingInfo->value("PodSetting/remoteIP", "192.168.1.160").toString());
ui->podRemotePort->setValue(
g_networkSettingInfo->value("PodSetting/remotePort", 10000).toInt());
ui->podLocalPort->setValue(
g_networkSettingInfo->value("PodSetting/localPort", 10001).toInt());
QString localIP =
g_networkSettingInfo->value("PodSetting/localIP").toString();
for (int i = 0; i < ui->podLocalIP->count(); ++i) {
if (localIP == ui->podLocalIP->itemText(i)) {
ui->podLocalIP->setCurrentIndex(i);
}
}
}
void CommunicationSettingDlg::on_podConnectBtn_clicked()
{
if (!isValidIP()) { return; }
savePodIniSetting();
NetworkIPStruct networkIP;
if (!_commIsConnect)//断开时点击连接
{
_commIsConnect = true;//状态为连接
networkIP.localIP = ui->podLocalIP->currentText();
networkIP.remoteIP = ui->podRemoteIPEdit->text();
networkIP.localPort = ui->podLocalPort->value();
networkIP.remotePort = ui->podRemotePort->value();
emit sendPodData(networkIP, _commIsConnect);
ui->podConnectBtn->setText("断开");
}
else
{
_commIsConnect = false;//状态为连接
emit sendPodData(networkIP, _commIsConnect);
ui->podConnectBtn->setText("连接");
}
}
void CommunicationSettingDlg::initCombobox() {
ui->dataSourceCombox->addItem(QStringLiteral("L测控"));
ui->dataSourceCombox->addItem(QStringLiteral("卫通1路"));
ui->dataSourceCombox->addItem(QStringLiteral("卫通2路"));
ui->dataSourceCombox->setCurrentIndex(0);
}
void CommunicationSettingDlg::initNetworkSetting() {
QStringList localIPList;
getLocalIP(localIPList);
ui->localIP->addItems(localIPList);
ui->podLocalIP->addItems(localIPList);
ui->remoteIPEdit->setText(QStringLiteral("223.0.0.1"));
ui->remotePort->setValue(8080);
ui->localPort->setValue(8082);
ui->podRemotePort->setValue(10000);
ui->podLocalPort->setValue(10001);
}
void CommunicationSettingDlg::setSaveSettingParms() {
if (!g_networkSettingInfo) return;
int dataSourceType = g_networkSettingInfo->value("DataSource").toInt();
ui->dataSourceCombox->setCurrentIndex(dataSourceType);
QString groupName = "";
switch (dataSourceType) {
case 0:
groupName = "LLink";
break;
case 1:
groupName = "SATCOM1";
break;
case 2:
groupName = "SATCOM2";
break;
default:
break;
}
ui->remoteIPEdit->setText(
g_networkSettingInfo->value(groupName + "/remoteIP").toString());
ui->remotePort->setValue(
g_networkSettingInfo->value(groupName + "/remotePort").toInt());
ui->localPort->setValue(
g_networkSettingInfo->value(groupName + "/localPort").toInt());
QString localIP =
g_networkSettingInfo->value(groupName + "/localIP").toString();
for (int i = 0; i < ui->localIP->count(); ++i) {
if (localIP == ui->localIP->itemText(i)) {
ui->localIP->setCurrentIndex(i);
}
}
}
// 保存设置
void CommunicationSettingDlg::on_saveSettingBtn_clicked() {
ui->saveSettingBtn->setDisabled(true);
int dataType = ui->dataSourceCombox->currentIndex();
QString remoteIP = ui->remoteIPEdit->text();
if (dataType == 0) { // L链为组播
if (!isMulticastAddress(remoteIP)) {
emit sendErrorMessage("当前IP地址为单播地址请改为组播地址!", 2);
ui->saveSettingBtn->setDisabled(false);
return;
};
} else { // 卫通为单播
if (isMulticastAddress(remoteIP)) {
emit sendErrorMessage("当前IP地址为组播地址请改为单播地址!", 2);
ui->saveSettingBtn->setDisabled(false);
return;
};
}
// 保存配置参数
if (!g_networkSettingInfo) {
this->close();
return;
};
g_networkSettingInfo->setValue("DataSource", dataType);
QString groupName = "";
switch (dataType) {
case 0:
groupName = "LLink";
break;
case 1:
groupName = "SATCOM1";
break;
case 2:
groupName = "SATCOM2";
break;
default:
break;
}
g_networkSettingInfo->setValue(groupName + "/localIP",
ui->localIP->currentText());
g_networkSettingInfo->setValue(groupName + "/localPort",
ui->localPort->value());
g_networkSettingInfo->setValue(groupName + "/remoteIP",
ui->remoteIPEdit->text());
g_networkSettingInfo->setValue(groupName + "/remotePort",
ui->remotePort->value());
ui->saveSettingBtn->setDisabled(false);
emit sendErrorMessage("保存成功!", 1);
this->close();
}