12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include "dragdroptablewidget.h"
- #include <QDebug>
- #include <QHeaderView>
- #include <QMimeData>
- DragDropTableWidget::DragDropTableWidget(QWidget *parent) : QTableWidget(parent), m_currentDragRow(-1) {
- setAcceptDrops(true);
- setDragEnabled(true);
- setDropIndicatorShown(true);
- setSelectionBehavior(QAbstractItemView::SelectRows);
- setDragDropMode(QAbstractItemView::DragDrop); // Changed from InternalMove
- setDragDropOverwriteMode(false);
- setDefaultDropAction(Qt::MoveAction);
- verticalHeader()->setVisible(false);
- horizontalHeader()->setStretchLastSection(true);
- // Track selection changes to know which row is being dragged
- connect(this, &QTableWidget::itemSelectionChanged, this, [this]() {
- m_currentDragRow = currentRow();
- qDebug() << "Selection changed, current row:" << m_currentDragRow;
- });
- }
- void DragDropTableWidget::dragEnterEvent(QDragEnterEvent *event) {
- qDebug() << "DragDropTableWidget::dragEnterEvent";
- if (event->source() == this && event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
- event->setAccepted(true);
- } else {
- event->ignore();
- }
- }
- void DragDropTableWidget::dragMoveEvent(QDragMoveEvent *event) {
- qDebug() << "DragDropTableWidget::dragMoveEvent";
- if (event->source() == this && event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
- event->setAccepted(true);
- } else {
- event->ignore();
- }
- }
- void DragDropTableWidget::dropEvent(QDropEvent *event) {
- qDebug() << "DragDropTableWidget::dropEvent source=" << event->source() << " m_currentDragRow=" << m_currentDragRow;
- // Prevent default handling by the widget
- event->setAccepted(true);
- if (event->source() != this) {
- qDebug() << "Drop event ignored: source is not this table";
- return;
- }
- int toRow = indexAt(event->pos()).row();
- if (toRow == -1) {
- toRow = rowCount();
- }
- qDebug() << "Drop at row:" << toRow;
- if (m_currentDragRow >= 0 && m_currentDragRow != toRow) {
- emit rowDropped(m_currentDragRow, toRow);
- }
- }
|