JIoMapPage.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #ifndef JIOMAPPAGE_H
  2. #define JIOMAPPAGE_H
  3. #include "TreeViewManagerHead.h"
  4. #include <QMouseEvent>
  5. class ClickCircleLabel : public QLabel {
  6. Q_OBJECT
  7. public:
  8. ClickCircleLabel(QWidget* parent = nullptr)
  9. : QLabel(parent), m_bClicked(false)
  10. {
  11. setFixedSize(30, 30);
  12. }
  13. protected:
  14. void paintEvent(QPaintEvent* event) override
  15. {
  16. QLabel::paintEvent(event);
  17. QPainter painter(this);
  18. painter.setRenderHint(QPainter::Antialiasing);
  19. int radius = qMin(width(), height()) / 2 - 5;
  20. int x = (width() - 2 * radius) / 2;
  21. int y = (height() - 2 * radius) / 2;
  22. painter.setPen(Qt::NoPen);
  23. painter.setBrush(m_bClicked ? Qt::red : Qt::gray);
  24. painter.drawEllipse(x, y, 2 * radius, 2 * radius);
  25. }
  26. void mousePressEvent(QMouseEvent* event) override
  27. {
  28. if (event->button() == Qt::LeftButton)
  29. {
  30. m_bClicked = !m_bClicked;
  31. update();
  32. }
  33. QLabel::mousePressEvent(event);
  34. }
  35. private:
  36. bool m_bClicked; // 当前状态
  37. };
  38. class JIoMapPage :public QObject
  39. {
  40. Q_OBJECT
  41. public:
  42. JIoMapPage();
  43. static QWidget* CreateIoPage();
  44. };
  45. #include <QApplication>
  46. #include <QTableWidget>
  47. #include <QHeaderView>
  48. #include <QVBoxLayout>
  49. #include <QPushButton>
  50. #include <QWidget>
  51. #include <QMessageBox>
  52. class GPITableWidget : public QWidget {
  53. Q_OBJECT
  54. public:
  55. GPITableWidget(QWidget* parent = nullptr) : QWidget(parent) {
  56. // 创建主布局
  57. QVBoxLayout* mainLayout = new QVBoxLayout(this);
  58. // 创建表格控件
  59. tableWidget = new QTableWidget(this);
  60. // 设置表格属性
  61. tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  62. tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  63. tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
  64. // 设置表头
  65. QStringList headers;
  66. headers << "GPI名称" << "卡号" << "卡类型" << "GPI号" << "有效电平" << "状态";
  67. tableWidget->setColumnCount(headers.size());
  68. tableWidget->setHorizontalHeaderLabels(headers);
  69. // 设置表头自适应
  70. tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  71. // 添加按钮
  72. QPushButton* addButton = new QPushButton("添加行", this);
  73. QPushButton* deleteButton = new QPushButton("删除行", this);
  74. QPushButton* saveButton = new QPushButton("保存数据", this);
  75. // 按钮布局
  76. QHBoxLayout* buttonLayout = new QHBoxLayout();
  77. buttonLayout->addWidget(addButton);
  78. buttonLayout->addWidget(deleteButton);
  79. buttonLayout->addWidget(saveButton);
  80. // 添加到主布局
  81. mainLayout->addWidget(tableWidget);
  82. mainLayout->addLayout(buttonLayout);
  83. // 连接信号槽
  84. connect(addButton, &QPushButton::clicked, this, &GPITableWidget::addRow);
  85. connect(deleteButton, &QPushButton::clicked, this, &GPITableWidget::deleteRow);
  86. connect(saveButton, &QPushButton::clicked, this, &GPITableWidget::saveData);
  87. // 添加初始行
  88. addRow();
  89. }
  90. private slots:
  91. void addRow() {
  92. int row = tableWidget->rowCount();
  93. tableWidget->insertRow(row);
  94. // 为每一列创建项目
  95. tableWidget->setItem(row, 0, new QTableWidgetItem("GPI_" + QString::number(row + 1)));
  96. tableWidget->setItem(row, 1, new QTableWidgetItem(QString::number(row + 1)));
  97. tableWidget->setItem(row, 2, new QTableWidgetItem("类型" + QString::number((row % 3) + 1)));
  98. tableWidget->setItem(row, 3, new QTableWidgetItem(QString::number(row + 101)));
  99. tableWidget->setItem(row, 4, new QTableWidgetItem(row % 2 ? "高电平" : "低电平"));
  100. tableWidget->setItem(row, 5, new QTableWidgetItem("未激活"));
  101. }
  102. void deleteRow() {
  103. int currentRow = tableWidget->currentRow();
  104. if (currentRow >= 0) {
  105. tableWidget->removeRow(currentRow);
  106. }
  107. else {
  108. QMessageBox::warning(this, "警告", "请先选择要删除的行");
  109. }
  110. }
  111. void saveData() {
  112. QString data;
  113. for (int row = 0; row < tableWidget->rowCount(); ++row) {
  114. for (int col = 0; col < tableWidget->columnCount(); ++col) {
  115. QTableWidgetItem* item = tableWidget->item(row, col);
  116. if (item) {
  117. data += item->text() + "\t";
  118. }
  119. }
  120. data += "\n";
  121. }
  122. QMessageBox::information(this, "表格数据", "保存的数据:\n" + data);
  123. // 实际应用中,这里可以将数据保存到文件或数据库
  124. }
  125. private:
  126. QTableWidget* tableWidget;
  127. };
  128. #endif // JIOMAPPAGE_H