#include "NetworkConfigWidget.h" #include #include #include NetworkConfigWidget::NetworkConfigWidget(bool showPlcConfig, bool showTcpConfig, QWidget* parent) : QWidget(parent) { setupUI(showPlcConfig, showTcpConfig); } NetworkConfigWidget::~NetworkConfigWidget() { } void NetworkConfigWidget::setupUI(bool showPlcConfig, bool showTcpConfig) { QVBoxLayout* mainLayout = new QVBoxLayout(this); mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(10); const QString labelStyle = "color: rgb(221, 225, 233); background-color: transparent;"; const QString editStyle = "color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); border: 1px solid rgb(70, 72, 78); padding: 4px;"; const QString comboStyle = editStyle; const QString groupStyle = "QGroupBox { color: rgb(221, 225, 233); border: 1px solid rgb(100, 100, 100); border-radius: 4px; margin-top: 12px; padding-top: 8px; } QGroupBox::title { subcontrol-origin: margin; left: 10px; padding: 0 3px 0 3px; }"; QFont font; font.setPointSize(14); QGroupBox* groupCommon = new QGroupBox(QStringLiteral("通信参数"), this); groupCommon->setFont(font); groupCommon->setStyleSheet(groupStyle); QFormLayout* commonForm = new QFormLayout(groupCommon); commonForm->setSpacing(8); m_comboEulerOrder = new QComboBox(this); m_comboEulerOrder->setFont(font); m_comboEulerOrder->setStyleSheet(comboStyle); initEulerOrderComboBox(); m_labelEulerOrder = new QLabel(QStringLiteral("欧拉角旋转顺序:"), this); m_labelEulerOrder->setFont(font); m_labelEulerOrder->setStyleSheet(labelStyle); commonForm->addRow(m_labelEulerOrder, m_comboEulerOrder); m_comboOutputEulerOrder = new QComboBox(this); m_comboOutputEulerOrder->setFont(font); m_comboOutputEulerOrder->setStyleSheet(comboStyle); initOutputEulerOrderComboBox(); m_labelOutputEulerOrder = new QLabel(QStringLiteral("输出欧拉角顺序:"), this); m_labelOutputEulerOrder->setFont(font); m_labelOutputEulerOrder->setStyleSheet(labelStyle); commonForm->addRow(m_labelOutputEulerOrder, m_comboOutputEulerOrder); m_comboPoseOutputOrder = new QComboBox(this); m_comboPoseOutputOrder->setFont(font); m_comboPoseOutputOrder->setStyleSheet(comboStyle); initPoseOutputOrderComboBox(); QLabel* labelPoseOutput = new QLabel(QStringLiteral("姿态输入/输出顺序:"), this); labelPoseOutput->setFont(font); labelPoseOutput->setStyleSheet(labelStyle); commonForm->addRow(labelPoseOutput, m_comboPoseOutputOrder); m_comboDirVectorInvert = new QComboBox(this); m_comboDirVectorInvert->setFont(font); m_comboDirVectorInvert->setStyleSheet(comboStyle); initDirVectorInvertComboBox(); m_labelDirVectorInvert = new QLabel(QStringLiteral("方向向量调整:"), this); m_labelDirVectorInvert->setFont(font); m_labelDirVectorInvert->setStyleSheet(labelStyle); commonForm->addRow(m_labelDirVectorInvert, m_comboDirVectorInvert); m_comboLongAxisDir = new QComboBox(this); m_comboLongAxisDir->setFont(font); m_comboLongAxisDir->setStyleSheet(comboStyle); initLongAxisDirComboBox(); m_labelLongAxisDir = new QLabel(QStringLiteral("长边对应轴:"), this); m_labelLongAxisDir->setFont(font); m_labelLongAxisDir->setStyleSheet(labelStyle); commonForm->addRow(m_labelLongAxisDir, m_comboLongAxisDir); m_comboByteOrder = new QComboBox(this); m_comboByteOrder->setFont(font); m_comboByteOrder->setStyleSheet(comboStyle); initByteOrderComboBox(); QLabel* labelByte = new QLabel(QStringLiteral("数据字节序:"), this); labelByte->setFont(font); labelByte->setStyleSheet(labelStyle); commonForm->addRow(labelByte, m_comboByteOrder); mainLayout->addWidget(groupCommon); if (showPlcConfig) { m_groupPlc = new QGroupBox(QStringLiteral("PLC服务端配置"), this); m_groupPlc->setFont(font); m_groupPlc->setStyleSheet(groupStyle); QFormLayout* plcForm = new QFormLayout(m_groupPlc); plcForm->setSpacing(8); m_editPlcIp = new QLineEdit(this); m_editPlcIp->setFont(font); m_editPlcIp->setStyleSheet(editStyle); QLabel* l1 = new QLabel(QStringLiteral("PLC IP地址:"), this); l1->setFont(font); l1->setStyleSheet(labelStyle); plcForm->addRow(l1, m_editPlcIp); m_editPlcPort = new QLineEdit(this); m_editPlcPort->setFont(font); m_editPlcPort->setStyleSheet(editStyle); QLabel* l2 = new QLabel(QStringLiteral("PLC端口:"), this); l2->setFont(font); l2->setStyleSheet(labelStyle); plcForm->addRow(l2, m_editPlcPort); m_editAddrPhotoRequest = new QLineEdit(this); m_editAddrPhotoRequest->setFont(font); m_editAddrPhotoRequest->setStyleSheet(editStyle); QLabel* l3 = new QLabel(QStringLiteral("拍照请求地址:"), this); l3->setFont(font); l3->setStyleSheet(labelStyle); plcForm->addRow(l3, m_editAddrPhotoRequest); m_editAddrDataComplete = new QLineEdit(this); m_editAddrDataComplete->setFont(font); m_editAddrDataComplete->setStyleSheet(editStyle); QLabel* l4 = new QLabel(QStringLiteral("数据完成地址:"), this); l4->setFont(font); l4->setStyleSheet(labelStyle); plcForm->addRow(l4, m_editAddrDataComplete); m_editAddrCoordDataStart = new QLineEdit(this); m_editAddrCoordDataStart->setFont(font); m_editAddrCoordDataStart->setStyleSheet(editStyle); QLabel* l5 = new QLabel(QStringLiteral("坐标数据起始地址:"), this); l5->setFont(font); l5->setStyleSheet(labelStyle); plcForm->addRow(l5, m_editAddrCoordDataStart); mainLayout->addWidget(m_groupPlc); } if (showTcpConfig) { m_groupTcp = new QGroupBox(QStringLiteral("TCP服务端配置"), this); m_groupTcp->setFont(font); m_groupTcp->setStyleSheet(groupStyle); QFormLayout* tcpForm = new QFormLayout(m_groupTcp); tcpForm->setSpacing(8); m_editTcpPort = new QLineEdit(this); m_editTcpPort->setFont(font); m_editTcpPort->setStyleSheet(editStyle); QLabel* l6 = new QLabel(QStringLiteral("TCP端口:"), this); l6->setFont(font); l6->setStyleSheet(labelStyle); tcpForm->addRow(l6, m_editTcpPort); mainLayout->addWidget(m_groupTcp); } mainLayout->addStretch(); } void NetworkConfigWidget::initEulerOrderComboBox() { m_comboEulerOrder->addItem(QStringLiteral("RZ-RY-RX (外旋ZYX)"), EULER_ORDER_ZYX); m_comboEulerOrder->addItem(QStringLiteral("RX-RY-RZ (外旋XYZ)"), EULER_ORDER_XYZ); m_comboEulerOrder->addItem(QStringLiteral("RZ-RX-RY (外旋ZXY)"), EULER_ORDER_ZXY); m_comboEulerOrder->addItem(QStringLiteral("RY-RX-RZ (外旋YXZ)"), EULER_ORDER_YXZ); m_comboEulerOrder->addItem(QStringLiteral("RY-RZ-RX (外旋YZX)"), EULER_ORDER_YZX); m_comboEulerOrder->addItem(QStringLiteral("RX-RZ-RY (外旋XZY)"), EULER_ORDER_XZY); m_comboEulerOrder->setCurrentIndex(0); } void NetworkConfigWidget::initOutputEulerOrderComboBox() { m_comboOutputEulerOrder->addItem(QStringLiteral("RZ-RY-RX (外旋ZYX)"), EULER_ORDER_ZYX); m_comboOutputEulerOrder->addItem(QStringLiteral("RX-RY-RZ (外旋XYZ)"), EULER_ORDER_XYZ); m_comboOutputEulerOrder->addItem(QStringLiteral("RZ-RX-RY (外旋ZXY)"), EULER_ORDER_ZXY); m_comboOutputEulerOrder->addItem(QStringLiteral("RY-RX-RZ (外旋YXZ)"), EULER_ORDER_YXZ); m_comboOutputEulerOrder->addItem(QStringLiteral("RY-RZ-RX (外旋YZX)"), EULER_ORDER_YZX); m_comboOutputEulerOrder->addItem(QStringLiteral("RX-RZ-RY (外旋XZY)"), EULER_ORDER_XZY); m_comboOutputEulerOrder->setCurrentIndex(0); } void NetworkConfigWidget::initPoseOutputOrderComboBox() { m_comboPoseOutputOrder->addItem(QStringLiteral("RX-RY-RZ"), NET_POSE_OUTPUT_RX_RY_RZ); m_comboPoseOutputOrder->addItem(QStringLiteral("RX-RZ-RY"), NET_POSE_OUTPUT_RX_RZ_RY); m_comboPoseOutputOrder->addItem(QStringLiteral("RY-RX-RZ"), NET_POSE_OUTPUT_RY_RX_RZ); m_comboPoseOutputOrder->addItem(QStringLiteral("RY-RZ-RX"), NET_POSE_OUTPUT_RY_RZ_RX); m_comboPoseOutputOrder->addItem(QStringLiteral("RZ-RX-RY"), NET_POSE_OUTPUT_RZ_RX_RY); m_comboPoseOutputOrder->addItem(QStringLiteral("RZ-RY-RX"), NET_POSE_OUTPUT_RZ_RY_RX); m_comboPoseOutputOrder->setCurrentIndex(0); } void NetworkConfigWidget::initDirVectorInvertComboBox() { m_comboDirVectorInvert->addItem(QStringLiteral("不调整"), NET_DIR_INVERT_NONE); m_comboDirVectorInvert->addItem(QStringLiteral("XY反向"), NET_DIR_INVERT_XY); m_comboDirVectorInvert->addItem(QStringLiteral("XZ反向"), NET_DIR_INVERT_XZ); m_comboDirVectorInvert->addItem(QStringLiteral("YZ反向"), NET_DIR_INVERT_YZ); m_comboDirVectorInvert->setCurrentIndex(0); } void NetworkConfigWidget::initByteOrderComboBox() { m_comboByteOrder->addItem(QStringLiteral("大端序 (ABCD)"), NET_BYTE_ORDER_BIG); m_comboByteOrder->addItem(QStringLiteral("小端序 (DCBA)"), NET_BYTE_ORDER_LITTLE); m_comboByteOrder->setCurrentIndex(0); } void NetworkConfigWidget::initLongAxisDirComboBox() { m_comboLongAxisDir->addItem(QStringLiteral("X轴"), 0); m_comboLongAxisDir->addItem(QStringLiteral("Y轴"), 1); m_comboLongAxisDir->setCurrentIndex(0); } void NetworkConfigWidget::setConfig(const NetworkConfigData& config) { int idx = m_comboEulerOrder->findData(config.eulerOrder); if (idx >= 0) { m_comboEulerOrder->setCurrentIndex(idx); } idx = m_comboOutputEulerOrder->findData(config.outputEulerOrder); if (idx >= 0) { m_comboOutputEulerOrder->setCurrentIndex(idx); } idx = m_comboPoseOutputOrder->findData(config.poseOutputOrder); if (idx >= 0) { m_comboPoseOutputOrder->setCurrentIndex(idx); } idx = m_comboDirVectorInvert->findData(config.dirVectorInvert); if (idx >= 0) { m_comboDirVectorInvert->setCurrentIndex(idx); } idx = m_comboLongAxisDir->findData(config.longAxisDir); if (idx >= 0) { m_comboLongAxisDir->setCurrentIndex(idx); } idx = m_comboByteOrder->findData(config.byteOrder); if (idx >= 0) { m_comboByteOrder->setCurrentIndex(idx); } if (m_editPlcIp) { m_editPlcIp->setText(config.plcServerIp); } if (m_editPlcPort) { m_editPlcPort->setText(QString::number(config.plcServerPort)); } if (m_editAddrPhotoRequest) { m_editAddrPhotoRequest->setText(QString::number(config.addrPhotoRequest)); } if (m_editAddrDataComplete) { m_editAddrDataComplete->setText(QString::number(config.addrDataComplete)); } if (m_editAddrCoordDataStart) { m_editAddrCoordDataStart->setText(QString::number(config.addrCoordDataStart)); } if (m_editTcpPort) { m_editTcpPort->setText(QString::number(config.tcpServerPort)); } } NetworkConfigData NetworkConfigWidget::getConfig() const { NetworkConfigData config; config.eulerOrder = m_comboEulerOrder->currentData().toInt(); config.outputEulerOrder = m_comboOutputEulerOrder->currentData().toInt(); config.poseOutputOrder = m_comboPoseOutputOrder->currentData().toInt(); config.dirVectorInvert = m_comboDirVectorInvert->currentData().toInt(); config.byteOrder = m_comboByteOrder->currentData().toInt(); config.longAxisDir = m_comboLongAxisDir->currentData().toInt(); if (m_editPlcIp) { config.plcServerIp = m_editPlcIp->text().trimmed(); } if (m_editPlcPort) { config.plcServerPort = m_editPlcPort->text().toInt(); } if (m_editAddrPhotoRequest) { config.addrPhotoRequest = m_editAddrPhotoRequest->text().toInt(); } if (m_editAddrDataComplete) { config.addrDataComplete = m_editAddrDataComplete->text().toInt(); } if (m_editAddrCoordDataStart) { config.addrCoordDataStart = m_editAddrCoordDataStart->text().toInt(); } if (m_editTcpPort) { config.tcpServerPort = m_editTcpPort->text().toInt(); } return config; } int NetworkConfigWidget::eulerOrder() const { return m_comboEulerOrder->currentData().toInt(); } int NetworkConfigWidget::outputEulerOrder() const { return m_comboOutputEulerOrder->currentData().toInt(); } int NetworkConfigWidget::poseOutputOrder() const { return m_comboPoseOutputOrder->currentData().toInt(); } int NetworkConfigWidget::dirVectorInvert() const { return m_comboDirVectorInvert->currentData().toInt(); } int NetworkConfigWidget::byteOrder() const { return m_comboByteOrder->currentData().toInt(); } int NetworkConfigWidget::longAxisDir() const { return m_comboLongAxisDir->currentData().toInt(); } void NetworkConfigWidget::setExtrinsicControlsVisible(bool visible) { auto applyVisibility = [visible](QWidget* w) { if (w) w->setVisible(visible); }; applyVisibility(m_labelEulerOrder); applyVisibility(m_comboEulerOrder); applyVisibility(m_labelOutputEulerOrder); applyVisibility(m_comboOutputEulerOrder); applyVisibility(m_labelDirVectorInvert); applyVisibility(m_comboDirVectorInvert); applyVisibility(m_labelLongAxisDir); applyVisibility(m_comboLongAxisDir); }