#include "relaysetting.h" #include "ui_relaysetting.h" #include #include #include #include #include #include RelaySetting::RelaySetting(QWidget *parent) : QWidget(parent) , ui(new Ui::RelaySetting) { ui->setupUi(this); ui->widget_body->setProperty("flag", "body"); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); readJsonFile(QCoreApplication::applicationDirPath() + "\\config\\main.json"); for (int var = 0; var < map_slot_config.size(); ++var) { if (map_slot_config[var].slot_type == 30) { ui->comboBox_slot->addItem(QString::number(map_slot_config[var].slot)); } } connect(ui->buttonGroup_OK, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_TX_RX, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_1, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_2, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_3, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_4, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_5, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_6, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_7, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_8, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_9, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_10, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_11, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_12, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_13, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_14, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_15, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_16, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_TEST, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_STATUS, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); } RelaySetting::~RelaySetting() { delete ui; } void RelaySetting::readJsonFile(const QString &filePath) { // 创建文件对象 QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Cannot open file for reading:" << filePath; return; } QString content = file.readAll(); file.close(); QByteArray jsonData = content.toUtf8(); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); if (jsonDoc.isNull()) { qDebug() << "Cannot parse JSON document"; return; } if (!jsonDoc.isObject() && !jsonDoc.isArray()) { qDebug() << "JSON document is not an object or an array"; return; } int slot_id = 0; QJsonArray jsonArray = jsonDoc.array(); for (const QJsonValue &value : jsonArray) { SlotConfig slot_config; if (value.isObject()) { // 处理数组中的对象,例如每个对象代表一个记录或用户等。 QJsonObject obj = value.toObject(); slot_config.slot = obj["slot"].toInt(); slot_config.slot_type = obj["slot_type"].toInt(); slot_config.chan_display = obj["chan_display"].toString(); slot_config.rack_type = obj["rack_type"].toString(); map_slot_config.insert(slot_id, slot_config); slot_id ++; } } } void RelaySetting::onRadioButtonClicked(QAbstractButton *button) { QButtonGroup *group = qobject_cast(sender()); if (!group || !button) { return; } qDebug() << "Group:" << group << ", Selected button text:" << button->text(); QTcpSocket socket; // 连接到服务器 socket.connectToHost(g_strServerIp, 10000); if (!socket.waitForConnected()) { qDebug() << "Connection failed!"; return; } PackageHead header = { {0xAA, 0x55, 0xAA}, kRelaySetting, sizeof(RelaySettingReq), 0, {} }; int slot = ui->comboBox_slot->currentText().toInt(); qDebug() << "slot" << slot << endl; RelaySettingReq relay_setting_req; if (slot == 0) { relay_setting_req.card_id = 0xFF; } else { relay_setting_req.card_id = slot & 0xFF; } QString led_id = group->objectName().mid(12); qDebug() << "led_id" << led_id << endl; if (led_id == "OK") { relay_setting_req.led_id = 0xff; } else if (led_id == "TX_RX") { relay_setting_req.led_id = 0xf1; } else if (led_id == "TEST") { relay_setting_req.led_id = 0xee; } else if (led_id == "STATUS") { relay_setting_req.led_id = 0xe1; } else { relay_setting_req.led_id = led_id.toInt() & 0xFF; } if (button->text() == "OFF") { relay_setting_req.led_operate = 0; } else if (button->text() == "ON") { relay_setting_req.led_operate = 1; } else if (button->text() == "红色") { relay_setting_req.led_operate = 2; } else if (button->text() == "绿色") { relay_setting_req.led_operate = 3; } else if (button->text() == "红色1Hz闪烁" || button->text() == "红色闪烁") { relay_setting_req.led_operate = 4; } else if (button->text() == "红色2Hz闪烁") { relay_setting_req.led_operate = 5; } else if (button->text() == "绿色闪烁") { relay_setting_req.led_operate = 6; } else if (button->text() == "测试") { relay_setting_req.led_operate = 7; } else if (button->text() == "手动") { relay_setting_req.led_operate = 8; } else if (button->text() == "工作") { relay_setting_req.led_operate = 9; } qDebug() << "relay_setting_req.led_operate " << relay_setting_req.led_operate; char send_buf[20] = {0}; memcpy(send_buf, (char *)&header, sizeof(PackageHead)); memcpy(send_buf + sizeof(PackageHead), (char *)&relay_setting_req, sizeof(RelaySettingReq)); int length = sizeof(PackageHead) + sizeof(RelaySettingReq); qint64 bytesWritten = socket.write(send_buf, length); qDebug() << "Server response: " << bytesWritten; if (socket.waitForReadyRead()) { QByteArray response = socket.readAll(); PackageHead header; RelaySettingRsp relay_setting_rsp; memcpy(&header, response.data(), sizeof(PackageHead)); qDebug() << "header len" << header.len << endl; memcpy(&relay_setting_rsp, response.data() + sizeof(PackageHead), sizeof(RelaySettingRsp)); qDebug() << "relay_setting_rsp code" << relay_setting_rsp.code << endl; } } void RelaySetting::on_pushButton_status_clicked() { QTcpSocket socket; // 连接到服务器 socket.connectToHost(g_strServerIp, 10000); if (!socket.waitForConnected()) { qDebug() << "Connection failed!"; return; } PackageHead header = { {0xAA, 0x55, 0xAA}, kRelayStatus, sizeof(RelaySettingReq), 0, {} }; int slot = ui->comboBox_slot->currentText().toInt(); qDebug() << "slot" << slot << endl; RelayStatusReq relay_status_req; if (slot == 0) { relay_status_req.card_id = 0xFF; } else { relay_status_req.card_id = slot & 0xFF; } char send_buf[20] = {0}; memcpy(send_buf, (char *)&header, sizeof(PackageHead)); memcpy(send_buf + sizeof(PackageHead), (char *)&relay_status_req, sizeof(RelayStatusReq)); int length = sizeof(PackageHead) + sizeof(RelayStatusReq); qint64 bytesWritten = socket.write(send_buf, length); qDebug() << "Server response: " << bytesWritten; if (socket.waitForReadyRead()) { QByteArray response = socket.readAll(); PackageHead header; RelayStatusRsp relay_status_rsp; memcpy(&header, response.data(), sizeof(PackageHead)); qDebug() << "header len" << header.len << endl; memcpy(&relay_status_rsp, response.data() + sizeof(PackageHead), sizeof(RelayStatusRsp)); qDebug() << "relay_setting_rsp status" << relay_status_rsp.status << endl; if (relay_status_rsp.status == 7) { ui->label_status->setText("测试"); } else if (relay_status_rsp.status == 8) { ui->label_status->setText("手动"); } else if (relay_status_rsp.status == 9) { ui->label_status->setText("工作"); } } }