原文:http://beself.top/2020/02/16/qtablewidget-copy-paste/
QTableWidget控件似乎没有复制粘贴的功能可以直接用,所以做的时候实现了一下
- 要实现复制粘贴功能的前提都是要选中表中的内容
- 添加相关事件
复制代码
// 复制选中内容
void JInfoManger::copySelectFromTable()
{
QList<QTableWidgetSelectionRange> sRangeList = TableAccount->selectedRanges();
for(const auto &p : qAsConst(sRangeList)) {
// qDebug() << "leftColumn:" << p.leftColumn() << ", rightColumn:" << p.rightColumn();
// qDebug() << "topRow:" << p.topRow() << "bottomRow:" << p.bottomRow();
// qDebug() << "rowCount:" << p.rowCount() << ", columnCount:" << p.columnCount();
QString str;
for (auto i = p.topRow(); i <= p.bottomRow(); i++) {
QString rowStr;
for (auto j = p.leftColumn(); j <= p.rightColumn(); j++) {
QTableWidgetItem* item = TableAccount->item(i, j);
if(item != nullptr) {
if(j == p.leftColumn())
rowStr = item->text() + "\t";
else if (j == p.rightColumn())
rowStr = rowStr + item->text() + "\n";
else
rowStr = rowStr + item->text() + "\t";
}
else {
break;
}
}
str += rowStr;
}
clipBoard->setText(str);
}
}
粘贴代码
// 粘贴,从选中的第一个单元格开始
void JInfoManger::pasteToTable()
{
QList<QTableWidgetSelectionRange> sRangeList = TableAccount->selectedRanges();
for(const auto &p : qAsConst(sRangeList)) {
QString str = clipBoard->text();
// str.replace(",", "\t");
// str.replace(";", "\t");
int ColCnt = TableAccount->columnCount();
QList<QString> RowStr = str.split("\n");
int x = p.topRow();
for(const auto &Row : qAsConst(RowStr)) {
if(!Row.isEmpty()) {
QList<QString> ColStr = Row.split("\t");
int y = p.leftColumn();
for(const auto &Col : qAsConst(ColStr)) {
QTableWidgetItem* item = TableAccount->item(x, y);
if(item == nullptr)
TableAccount->setItem(x, y, new QTableWidgetItem(Col));
else
TableAccount->item(x, y)->setText(Col);
if(y + 1 == ColCnt)
break;
++y;
}
if(x + 1 == TableAccount->rowCount())
TableAccount->setRowCount(TableAccount->rowCount() + 1);
++x;
}
}
}
}