123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #ifndef JIOMAPPAGE_H
- #define JIOMAPPAGE_H
- #include "TreeViewManagerHead.h"
- #include "Src/common/JLogAllOutput.h"
- #include <QMouseEvent>
- class IoStateLab : public QLabel {
- Q_OBJECT
- public:
- IoStateLab(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->GetViewMotion()->GetIoStatus(m_strName.toStdString(), nOutput);
- m_bClicked = nOutput;
- }
- else
- {
- m_pCamera->GetViewMotion()->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 <QApplication>
- #include <QTableWidget>
- #include <QHeaderView>
- #include <QVBoxLayout>
- #include <QPushButton>
- #include <QWidget>
- #include <QMessageBox>
- 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
|