功能介绍
原文:http://beself.top/2020/02/15/qtablewidget-overrode-keypressevent/
- Tab间单元格向后走一格,最后一格时新建一行并移动到新建行的第一格
- 上键移动到第一行时不再移动,移动到最后一行时新建一行并移动到新建行
- 左键移动第一行第一列时停止移动,否则一直向前移动
- 右键移动到最后一行最后一列时新新建一行并移动到新行,否则向后移动
- 下键移动到最后一行时新建行并向下移动
动图展示
部分代码
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;
}
}