#ifndef JIOMAPPAGE_H #define JIOMAPPAGE_H #include "TreeViewManagerHead.h" #include "Src/common/JLogAllOutput.h" #include class ClickCircleLabel : public QLabel { Q_OBJECT public: ClickCircleLabel(QWidget* parent = nullptr) : QLabel(parent) { setFixedSize(30, 30); } public: /**设置io 轴名称 */ void setIoName(const QString& strName) { m_strName = strName; UpDataIoStatus(true); } void UpDataIoStatus(bool isInit) { if (m_pCamera == nullptr) { m_pCamera = ns_module::CViewInterface::GetInstance(); if (m_pCamera == nullptr) { // 为了调试准备的 JLogAllOutput::cmd_error("io 轴设置失败"); return; } } if (isInit) { // 信号量 ns_db::DIGIT_IO_LEVEL nOutput; m_pCamera->GetIoStatus(m_strName.toStdString(), nOutput); m_bClicked = nOutput; } else { m_pCamera->SetIoStatus(m_strName.toStdString(), m_bClicked); } } protected: void paintEvent(QPaintEvent* event) override { QLabel::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); int radius = qMin(width(), height()) / 2 - 5; int x = (width() - 2 * radius) / 2; int y = (height() - 2 * radius) / 2; painter.setPen(Qt::NoPen); painter.setBrush(m_bClicked ? Qt::green : Qt::red); painter.drawEllipse(x, y, 2 * radius, 2 * radius); } void mousePressEvent(QMouseEvent* event) override { if (event->button() == Qt::LeftButton) { m_bClicked = !m_bClicked; UpDataIoStatus(false); update(); } QLabel::mousePressEvent(event); } private: bool m_bClicked; // 当前状态 QString m_strName; ns_module::CViewInterface* m_pCamera = nullptr; }; class JIoMapPage :public QObject { Q_OBJECT public: JIoMapPage(); /**io 界面,先获取全部,后续可用,没用到的后续修改 */ static QWidget* CreateIoPage(const CONFIG_BASE_STRUCT& control); /**轴测试页面 */ static QWidget* CreateAxisTestPage(const CONFIG_BASE_STRUCT& control); }; #include #include #include #include #include #include #include class GPITableWidget : public QWidget { Q_OBJECT public: GPITableWidget(QWidget* parent = nullptr) : QWidget(parent) { // 创建主布局 QVBoxLayout* mainLayout = new QVBoxLayout(this); // 创建表格控件 tableWidget = new QTableWidget(this); // 设置表格属性 tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed); // 设置表头 QStringList headers; headers << "GPI名称" << "卡号" << "卡类型" << "GPI号" << "有效电平" << "状态"; tableWidget->setColumnCount(headers.size()); tableWidget->setHorizontalHeaderLabels(headers); // 设置表头自适应 tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 添加按钮 QPushButton* addButton = new QPushButton("添加行", this); QPushButton* deleteButton = new QPushButton("删除行", this); QPushButton* saveButton = new QPushButton("保存数据", this); // 按钮布局 QHBoxLayout* buttonLayout = new QHBoxLayout(); buttonLayout->addWidget(addButton); buttonLayout->addWidget(deleteButton); buttonLayout->addWidget(saveButton); // 添加到主布局 mainLayout->addWidget(tableWidget); mainLayout->addLayout(buttonLayout); // 连接信号槽 connect(addButton, &QPushButton::clicked, this, &GPITableWidget::addRow); connect(deleteButton, &QPushButton::clicked, this, &GPITableWidget::deleteRow); connect(saveButton, &QPushButton::clicked, this, &GPITableWidget::saveData); // 添加初始行 addRow(); } private slots: void addRow() { int row = tableWidget->rowCount(); tableWidget->insertRow(row); // 为每一列创建项目 tableWidget->setItem(row, 0, new QTableWidgetItem("GPI_" + QString::number(row + 1))); tableWidget->setItem(row, 1, new QTableWidgetItem(QString::number(row + 1))); tableWidget->setItem(row, 2, new QTableWidgetItem("类型" + QString::number((row % 3) + 1))); tableWidget->setItem(row, 3, new QTableWidgetItem(QString::number(row + 101))); tableWidget->setItem(row, 4, new QTableWidgetItem(row % 2 ? "高电平" : "低电平")); tableWidget->setItem(row, 5, new QTableWidgetItem("未激活")); } void deleteRow() { int currentRow = tableWidget->currentRow(); if (currentRow >= 0) { tableWidget->removeRow(currentRow); } else { QMessageBox::warning(this, "警告", "请先选择要删除的行"); } } void saveData() { QString data; for (int row = 0; row < tableWidget->rowCount(); ++row) { for (int col = 0; col < tableWidget->columnCount(); ++col) { QTableWidgetItem* item = tableWidget->item(row, col); if (item) { data += item->text() + "\t"; } } data += "\n"; } QMessageBox::information(this, "表格数据", "保存的数据:\n" + data); // 实际应用中,这里可以将数据保存到文件或数据库 } private: QTableWidget* tableWidget; }; #endif // JIOMAPPAGE_H