QTableWidget实现复制粘贴

QTableWidget控件似乎没有复制粘贴的功能可以直接用,所以做的时候实现了一下

  • 要实现复制粘贴功能的前提都是要选中表中的内容
  • 添加相关事件

复制代码


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 复制选中内容
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);
    }
}

粘贴代码


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 粘贴,从选中的第一个单元格开始
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;
            }
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注