QTableWidget实现复制粘贴

目录

1 实现功能

2 代码


 

1 实现功能

(1)选择一个单元格复制,可进行多个单元格粘贴

(2)选择多个单元格复制,可进行同样多单元格粘贴,行列均可

2 代码
void TableWidgetClass::keyPressEvent(QKeyEvent *event) {

    if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_C) {

        // 实现复制逻辑
        QTableWidgetItem *item;
        //QMimeData *mimeData = new QMimeData;
        QString list;
        for (int i = 0; i < selectedItems().count(); ++i) {
            item = selectedItems().at(i);
            if(item->text().isEmpty())
                list += " ";
            else
                list += item->text();
            list += "\n";
        }
        //mimeData->setText(list);
        m_Clipboard->setText(list);
        QString list1 = m_Clipboard->text();
        list1.trimmed();

    }
    else if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_V) {
    // 实现粘贴逻辑
        QString mimeData = m_Clipboard->text();
        if (!mimeData.isEmpty()) {

            QStringList list = mimeData.split("\n");
            list.removeLast();
            if(list.count() > 1){
                if(list.count() == selectedItems().count()){
                    for (int i = 0; i < selectedItems().count(); ++i) {
                        QTableWidgetItem *item = selectedItems().at(i);
                        QString text = list.at(i);
                        item->setText(text);
                    }

                }
            }
            else if(list.count() == 1){
                for (int i = 0; i < selectedItems().count(); ++i) {
                    QTableWidgetItem *item = selectedItems().at(i);
                    QString text = list.at(0);
                    item->setText(text);
                }
            }


        }
    }
    else
        QTableWidget::keyPressEvent(event);
}

该类继承了QTableWidget,代码较为简单。