#include "sequenceselectorwidget.h" #include #include #include #include #include #include #include "dragdroptablewidget.h" SequenceSelectorWidget::SequenceSelectorWidget(const QStringList &pcSnList, QWidget *parent) : QDialog(parent), m_pcSnList(pcSnList) { setupUI(); populateTable(); centerOnScreen(); } SequenceSelectorWidget::~SequenceSelectorWidget() {} void SequenceSelectorWidget::setupUI() { setWindowTitle("起爆顺序设置"); setFixedSize(440, 550); setModal(true); // Create main layout with margins QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setContentsMargins(20, 20, 20, 20); mainLayout->setSpacing(15); // Create our custom table widget m_tableWidget = new DragDropTableWidget(this); m_tableWidget->setShowGrid(true); // Set up the table - keep all original logic m_tableWidget->setColumnCount(2); QStringList headers; headers << "序号" << "井下起爆器"; m_tableWidget->setHorizontalHeaderLabels(headers); // Additional properties specific to our needs m_tableWidget->setColumnWidth(0, 80); // Add table to main layout mainLayout->addWidget(m_tableWidget); // Create button layout QHBoxLayout *buttonLayout = new QHBoxLayout(); m_confirmButton = new QPushButton("确认", this); m_cancelButton = new QPushButton("取消", this); m_confirmButton->setStyleSheet( "QPushButton {" " background-color: #007ACC;" " color: white;" " border: none;" " padding: 8px 16px;" " border-radius: 4px;" " font-size: 14px;" "}" "QPushButton:hover {" " background-color: #005A9E;" "}" "QPushButton:pressed {" " background-color: #004578;" "}"); m_cancelButton->setStyleSheet( "QPushButton {" " background-color: #6C757D;" " color: white;" " border: none;" " padding: 8px 16px;" " border-radius: 4px;" " font-size: 14px;" "}" "QPushButton:hover {" " background-color: #545B62;" "}" "QPushButton:pressed {" " background-color: #3D4449;" "}"); buttonLayout->addStretch(); buttonLayout->addWidget(m_confirmButton); buttonLayout->addWidget(m_cancelButton); // Add button layout to main layout mainLayout->addLayout(buttonLayout); // Connect signals connect(m_confirmButton, &QPushButton::clicked, this, &SequenceSelectorWidget::onConfirmClicked); connect(m_cancelButton, &QPushButton::clicked, this, &SequenceSelectorWidget::onCancelClicked); // Connect our custom drag-drop signal connect(m_tableWidget, &DragDropTableWidget::rowDropped, this, &SequenceSelectorWidget::handleRowDropped); } void SequenceSelectorWidget::populateTable() { m_tableWidget->clearContents(); m_tableWidget->setRowCount(m_pcSnList.size()); qDebug() << "draw" << m_pcSnList; for (int i = 0; i < m_pcSnList.size(); ++i) { // Sequence number QTableWidgetItem *sequenceItem = new QTableWidgetItem(QString::number(i + 1)); sequenceItem->setTextAlignment(Qt::AlignCenter); sequenceItem->setFlags(sequenceItem->flags() & ~Qt::ItemIsEditable); m_tableWidget->setItem(i, 0, sequenceItem); // PcSn QTableWidgetItem *pcSnItem = new QTableWidgetItem(m_pcSnList[i]); pcSnItem->setTextAlignment(Qt::AlignCenter); pcSnItem->setFlags(pcSnItem->flags() & ~Qt::ItemIsEditable); m_tableWidget->setItem(i, 1, pcSnItem); } } QStringList SequenceSelectorWidget::getOrderedPcSnList() const { QStringList orderedList; for (int i = 0; i < m_tableWidget->rowCount(); ++i) { QTableWidgetItem *item = m_tableWidget->item(i, 1); if (item) { orderedList << item->text(); } } return orderedList; } void SequenceSelectorWidget::onConfirmClicked() { QStringList orderedPcSnList = getOrderedPcSnList(); emit startFiring(orderedPcSnList); accept(); } void SequenceSelectorWidget::onCancelClicked() { emit cancel(); reject(); } void SequenceSelectorWidget::centerOnScreen() { QScreen *screen = QApplication::primaryScreen(); if (screen) { QRect screenGeometry = screen->geometry(); int x = (screenGeometry.width() - width()) / 2; int y = (screenGeometry.height() - height()) / 2; move(x, y); } } void SequenceSelectorWidget::handleRowDropped(int fromRow, int toRow) { qDebug() << "Row dropped from" << fromRow << "to" << toRow; if (fromRow == toRow) { return; } // 获取当前所有数据 QStringList pcSnList; for (int i = 0; i < m_tableWidget->rowCount(); ++i) { QTableWidgetItem *item = m_tableWidget->item(i, 1); if (item) { pcSnList << item->text(); } } if (toRow >= pcSnList.size()) { toRow = pcSnList.size() - 1; // 确保不越界 } // Store the dragged row data QString draggedSn = m_tableWidget->item(fromRow, 1)->text(); pcSnList.removeAt(fromRow); pcSnList.insert(toRow, draggedSn); m_pcSnList = pcSnList; qDebug() << "Updated PcSnList:" << m_pcSnList; populateTable(); // Make sure the table maintains selection on the moved row // m_tableWidget->selectRow(toRow); }