复制:
// 复制选中内容
void MainWidget::copySelectFromTable()
{
QList<QTableWidgetSelectionRange> sRangeList = ui->tableWidget->selectedRanges();
for(const auto &p : qAsConst(sRangeList)) {
QString str;
for (auto i = p.topRow(); i <= p.bottomRow(); i++) {
QString rowStr;
for (auto j = p.leftColumn(); j <= p.rightColumn(); j++) {
QTableWidgetItem* item = ui->tableWidget->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= QApplication::clipboard();
clipboard->setText(str);
}
}
黏贴
// 粘贴,从选中的第一个单元格开始
void MainWidget::pasteToTable()
{
QList<QTableWidgetSelectionRange> sRangeList = ui->tableWidget->selectedRanges();
int allRow = ui->tableWidget->rowCount();
int allCol = ui->tableWidget->columnCount();
for(const auto &p : qAsConst(sRangeList)) {
QString str = clipboard->text();
int ColCnt = ui->tableWidget->columnCount();
QList<QString> RowStr = str.split("\n");
int copyAreaAllRow = RowStr.size();
qDebug()<<"copyAreaAllRow"<<copyAreaAllRow;
int x = p.topRow();
int rightIndex = p.rightColumn();
int surplusRow = allRow - x;
int surplusCol = allCol - rightIndex;
if((RowStr.size() -1) > surplusRow)//如果复制的行数大于剩余的行数,去除掉多余的赋值内容
{
int len = RowStr.size();
for(int i=len -2;i>=surplusRow;i--)
{
RowStr.removeAt(i);
}
}
for(const auto &Row : qAsConst(RowStr)) {
if(!Row.isEmpty()) {
QList<QString> ColStr = Row.split("\t");//赋值的列数
if(ColStr.size() > surplusCol)//如果复制的列数大于剩余的列数,去除掉多余的赋值内容
{
int len = ColStr.size();
for(int i=len -1;i>=surplusCol;i--)
{
ColStr.removeAt(i);
}
}
int y = p.leftColumn();
for(const auto &Col : qAsConst(ColStr)) {
QTableWidgetItem* item = ui->tableWidget->item(x, y);
if(item == nullptr)
{
ui->tableWidget->setItem(x, y, new QTableWidgetItem(Col));
ui->tableWidget->item(x,y)->setForeground(QBrush(QColor(255,0,0)));
}
else
{
ui->tableWidget->item(x, y)->setText(Col);
ui->tableWidget->item(x,y)->setForeground(QBrush(QColor(255,0,0)));
}
if(y + 1 == ColCnt)
break;
++y;
}
++x;
}
}
}
}
小细节变量的命名自己要看清楚啊,我写的乱七八糟的但是运行没有问题,后续注意代码的简洁性