QTableWidget重载实现键盘操作

功能介绍

  1. Tab间单元格向后走一格,最后一格时新建一行并移动到新建行的第一格
  2. 上键移动到第一行时不再移动,移动到最后一行时新建一行并移动到新建行
  3. 左键移动第一行第一列时停止移动,否则一直向前移动
  4. 右键移动到最后一行最后一列时新新建一行并移动到新行,否则向后移动
  5. 下键移动到最后一行时新建行并向下移动

动图展示

部分代码


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
void JTableView::keyPressEvent(QKeyEvent* e)
{
    int ColCnt = columnCount();
    int RowCnt = rowCount();
    switch (e->key()) {
    case Qt::Key_Tab:
    {
        ++curColumn;
        if(ColCnt == curColumn) {
            curColumn = 0;
            ++curRow;
            setRowCount(RowCnt + 1);
            setCurrentCell(curRow, 0);
        }
        else {
            setCurrentCell(curRow, curColumn);
        }
    }
        break;
    case Qt::Key_Up:
    {
        if(0 == curRow)
            break;
        --curRow;
        setCurrentCell(curRow, curColumn);
    }
        break;
    case Qt::Key_Down:
    {
        ++curRow;
        if(RowCnt == curRow) {
            setRowCount(RowCnt + 1);
            setCurrentCell(curRow, curColumn);
        }
        else {
            setCurrentCell(curRow, curColumn);
        }
    }
        break;
    case Qt::Key_Left:
    {
        if(0 == curRow && 0 == curColumn)
            break;
        else if (curRow > 0 && curColumn == 0) {
            --curRow;
            curColumn = ColCnt - 1;
            setCurrentCell(curRow, curColumn);
        }
        else {
            --curColumn;
            setCurrentCell(curRow, curColumn);
        }
    }
        break;
    case Qt::Key_Right:
    {
        ++curColumn;
        if(RowCnt - 1 == curRow) {
            if(ColCnt == curColumn) {
                setRowCount(RowCnt + 1);
                curColumn = 0;
                ++curRow;
            }
        }
        else {
            if(ColCnt == curColumn) {
                ++curRow;
                curColumn = 0;
            }
        }
        setCurrentCell(curRow, curColumn);
    }
        break;
    default:
        break;
    }
}

发表评论

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