QTableview多单元格的复制、粘贴。

文章目录

前言

QTableview多单元格的复制、粘贴。可以在word或者excel表格中复制后粘贴到tableview。我这里是直接在mainwindow里写的这个函数,规范来说应该继承QTableview后,在派生类中重新keyPressEvent函数。

关键代码

void MainWindow::keyPressEvent(QKeyEvent *keyEvent)
{ 
    if(keyEvent->matches(QKeySequence::Copy))//复制
    { 
        QModelIndexList indexList = ui->tableView->selectionModel()->selectedIndexes();
        if(indexList.isEmpty())
            return;
        int startRow = indexList.first().row();
        int endRow = indexList.last().row();
        int startCol = indexList.first().column();
        int endCol = indexList.last().column();
        QStringList clipboardTextList;
        for(int i = startRow;i <= endRow;i++)
        { 
            QStringList rowText;
            for(int j = startCol;j <= endCol;j++)
            { 
                rowText.append(m_model.data(m_model.index(i,j)).toString());
            }
            clipboardTextList.append(rowText.join('\t'));
        }
        QString clipboardText = clipboardTextList.join('\n');
        QApplication::clipboard()->setText(clipboardText);
    }
    else if (keyEvent->matches(QKeySequence::Paste))
    { 
        QString clipboardText = QApplication::clipboard()->text();
        if(clipboardText.isEmpty())
            return;
        QStringList rowTextList = clipboardText.split('\n');
        if(rowTextList.last().isEmpty())//从word或者excel复制的内容后面可能会带'\n',导致split出来后面有个空字符串。
            rowTextList.removeLast();
        QModelIndexList indexList = ui->tableView->selectionModel()->selectedIndexes();
        if(indexList.isEmpty())
            return;
        QModelIndex startIndex = indexList.first();
        for(int i = 0;i < rowTextList.size();i++)
        { 
            QStringList itemTextList = rowTextList.at(i).split('\t');
            for(int j = 0;j < itemTextList.size();j++)
            { 
                QModelIndex curIndex = m_model.index(i + startIndex.row(),j + startIndex.column());
                if(curIndex.isValid())
                { 
                    m_model.setData(curIndex,itemTextList.at(j));
                }
            }
        }
    }
}
    原文作者:ccsj
    原文地址: https://blog.csdn.net/qq_42251890/article/details/125006869
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞