#include "NetworkConfigWidget.h" #include "ui_NetworkConfigWidget.h" #include #include NetworkConfigWidget::NetworkConfigWidget(bool showPlcConfig, bool showTcpConfig, QWidget* parent) : QWidget(parent) , ui(new Ui::NetworkConfigWidget) { setupUI(showPlcConfig, showTcpConfig); } NetworkConfigWidget::~NetworkConfigWidget() { delete ui; } void NetworkConfigWidget::setupUI(bool showPlcConfig, bool showTcpConfig) { ui->setupUi(this); QFont font; font.setPointSize(16); setStyleSheet( "QLabel { color: rgb(221, 225, 233); background-color: transparent; }" "QLineEdit, QComboBox { color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); " "border: 1px solid rgb(70, 72, 78); padding: 4px; }" "QComboBox QAbstractItemView { color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); " "selection-background-color: rgb(70, 100, 150); }" "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; }"); const QList widgets = findChildren(); for (QWidget* widget : widgets) { widget->setFont(font); } m_comboEulerOrder = ui->comboEulerOrder; m_comboOutputEulerOrder = ui->comboOutputEulerOrder; m_comboPoseOutputOrder = ui->comboPoseOutputOrder; m_comboByteOrder = ui->comboByteOrder; m_labelEulerOrder = ui->labelEulerOrder; m_labelOutputEulerOrder = ui->labelOutputEulerOrder; m_labelPoseOutputOrder = ui->labelPoseOutputOrder; m_groupPlc = ui->groupPlc; m_editPlcIp = ui->editPlcIp; m_editPlcPort = ui->editPlcPort; m_editAddrPhotoRequest = ui->editAddrPhotoRequest; m_editAddrDataComplete = ui->editAddrDataComplete; m_editAddrCoordDataStart = ui->editAddrCoordDataStart; m_groupTcp = ui->groupTcp; m_editTcpPort = ui->editTcpPort; initEulerOrderComboBox(); initOutputEulerOrderComboBox(); initPoseOutputOrderComboBox(); initByteOrderComboBox(); m_groupPlc->setVisible(showPlcConfig); m_groupTcp->setVisible(showTcpConfig); } 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::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::setConfig(const NetworkConfigData& config) { m_configCache = 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_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 = m_configCache; config.eulerOrder = m_comboEulerOrder->currentData().toInt(); config.outputEulerOrder = m_comboOutputEulerOrder->currentData().toInt(); config.poseOutputOrder = m_comboPoseOutputOrder->currentData().toInt(); config.byteOrder = m_comboByteOrder->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_configCache.dirVectorInvert; } int NetworkConfigWidget::byteOrder() const { return m_comboByteOrder->currentData().toInt(); } int NetworkConfigWidget::longAxisDir() const { return m_configCache.longAxisDir; } 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_labelPoseOutputOrder); applyVisibility(m_comboPoseOutputOrder); } void NetworkConfigWidget::setPoseOutputOrderVisible(bool visible) { if (m_labelPoseOutputOrder) { m_labelPoseOutputOrder->setVisible(visible); } if (m_comboPoseOutputOrder) { m_comboPoseOutputOrder->setVisible(visible); } }