// signal void cellPressed(int row, int column) // 傳遞拖拽起始行列 // slots void StartDrag(int row, int col) { if (col == LAYERFLDCOL) // 確保拖拽列爲可拖拽列 { m_rowFrom= row; // 記錄拖拽起始行 } else { m_rowFrom = -1; } } // signal void cellChanged(int row, int column) // 傳遞拖拽後改變行列 // slots void DropEnd(int row, int col) { if (col == LAYERFLDCOL && m_rowFrom != -1) // 判斷Drop的列是否爲可拖拽列 { QgsField fldTo = m_tmpFld.at(row); // 根據初始數據QList獲得最終單元格的數據 QString changeText = fldTo.name(); // 記錄 m_tmpFld.replace(row, ui->tableWidget->item(m_rowFrom, LAYERFLDCOL)->text()); // 交換初始數據,用於實時跟進拖拽以後的列中數據,即對應的行即爲QList中數據的索引 m_tmpFld.replace(m_rowFrom, changeText); ui->tableWidget->item(m_rowFrom, LAYERFLDCOL)->setText(changeText); // 更新起始行列中單元格的數據 } }
Ps: 來自一個菜鳥的無奈之舉。c++