ui设计界面中不用进行任何更改,只需要将两个槽函数转换后进行填写,话不多说直接上代码:
public:
// 存储拖放操作涉及的行索引
int startRow = -1;
int currentRow = -1;
void Manyset::on_tableWidget_cellEntered(int row, int column)
{
if (row >= 0 && row < ui->tableWidget->rowCount() && startRow != -1) {
currentRow = row;
// 获取行数据
QStringList startRowData;
QStringList currentRowData;
for (int column = 0; column < ui->tableWidget->columnCount(); ++column) {
QTableWidgetItem* startItem = ui->tableWidget->item(startRow, column);
QTableWidgetItem* currentItem = ui->tableWidget->item(currentRow, column);
if (startItem && currentItem) {
startRowData << startItem->text();
currentRowData << currentItem->text();
}
}
// 交换行数据
for (int column = 0; column < ui->tableWidget->columnCount(); ++column) {
QTableWidgetItem* startItem = ui->tableWidget->item(startRow, column);
QTableWidgetItem* currentItem = ui->tableWidget->item(currentRow, column);
if (startItem && currentItem) {
startItem->setText(currentRowData.at(column));
currentItem->setText(startRowData.at(column));
}
}
// 更新开始行索引,并重置当前行索引
startRow = currentRow;
currentRow = -1;
}
}
void Manyset::on_tableWidget_cellPressed(int row, int column)
{
if (row >= 0 && row < ui->tableWidget->rowCount()) {
startRow = row;
}
}
亲测有效,比网上那些重写这个函数重写那个函数方便使用得多,哈哈哈!