Qt QTableWidget多行多列复制粘贴
#include <QApplication>
#include <QClipboard>
#include <QTableWidget>
void copyTableSelection(QTableWidget *table) {QItemSelectionModel *selection = table->selectionModel();QModelIndexList indexes = selection->selectedIndexes();if(indexes.isEmpty()) return;int minRow = indexes.first().row();int maxRow = indexes.first().row();int minCol = indexes.first().column();int maxCol = indexes.first().column();foreach(QModelIndex index, indexes) {minRow = qMin(minRow, index.row());maxRow = qMax(maxRow, index.row());minCol = qMin(minCol, index.column());maxCol = qMax(maxCol, index.column());}QString clipboardText;for(int row = minRow; row <= maxRow; ++row) {for(int col = minCol; col <= maxCol; ++col) {QTableWidgetItem *item = table->item(row, col);if(item) clipboardText += item->text();if(col != maxCol) clipboardText += "\t";}if(row != maxRow) clipboardText += "\n";}QApplication::clipboard()->setText(clipboardText);
}
void pasteToTable(QTableWidget *table) {QString clipboardText = QApplication::clipboard()->text();if(clipboardText.isEmpty()) return;int startRow = table->currentRow();int startCol = table->currentColumn();if(startRow < 0) startRow = 0;if(startCol < 0) startCol = 0;QStringList rows = clipboardText.split('\n');for(int row = 0; row < rows.size(); ++row) {QStringList cols = rows[row].split('\t');for(int col = 0; col < cols.size(); ++col) {int targetRow = startRow + row;int targetCol = startCol + col;if(targetRow >= table->rowCount()) table->insertRow(table->rowCount());if(targetCol >= table->columnCount())table->insertColumn(table->columnCount());QTableWidgetItem *item = table->item(targetRow, targetCol);if(!item) {item = new QTableWidgetItem();table->setItem(targetRow, targetCol, item);}item->setText(cols[col]);}}
}