123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #include "sequenceselectorwidget.h"
- #include <QApplication>
- #include <QDebug>
- #include <QHeaderView>
- #include <QLabel>
- #include <QMessageBox>
- #include <QScreen>
- #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);
- }
|