QTableWidget实现复制粘贴

复制:

// 复制选中内容
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;
            }
        }
    }
}

小细节变量的命名自己要看清楚啊,我写的乱七八糟的但是运行没有问题,后续注意代码的简洁性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值