QTableWidget编辑单元格内容,按下回车键使焦点转到下一个单元格

编辑QTableWidget单元格内容按回车键后,使焦点从当前单元格转到下一个单元格。

先上效果:
在这里插入图片描述

方法:

为了在按Enter键时使焦点从表中的一个单元格转到下一个单元格,可以重新实现代理的eventFilter(),
并监听键盘事件:QEvent::KeyPress 

代码实现:

class MyItemDelegate : public QStyledItemDelegate
{
 Q_OBJECT
public:
     MyItemDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent)
     {
     	// 添加事件过滤器
        installEventFilter(this);
     }
     bool eventFilter (QObject *editor, QEvent *event)
     {
     		// 监听键盘事件
           if (event->type() == QEvent::KeyPress)
           {
             QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
			// 按下回车键
             if (keyEvent->key() == Qt::Key_Return)
             {
               qDebug() << "Ate key press" << keyEvent->key();
               // 提交当前项的数据
               emit commitData((QWidget*)editor);
               // 关闭编辑器并指向下一项
               closeEditor((QWidget*)editor, QAbstractItemDelegate::EditNextItem); 
               return true;
             }
           }
           return QStyledItemDelegate::eventFilter(editor, event);
     }
};

class TableWidget : public QTableWidget
{
    Q_OBJECT
public:
     TableWidget()
     {
     	// 设置代理
       setItemDelegate(new MyItemDelegate());
       // 设置行列数
       setColumnCount(5);
       setRowCount(5);
     }
};

调用:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TableWidget box;
    box.show();
    return a.exec();
}
void QAbstractItemView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) [virtual protected slot]
关闭给定的编辑器,然后将其释放。参数hint用于指定在编辑操作结束之后,视图应如何响应。
例如,hint可能指示应打开视图中的下一项进行编辑。

void QAbstractItemView::commitData(QWidget *editor)
提交编辑器中的内容给model。

qt官方API

枚举类型:enum QAbstractItemDelegate::EndEditHint

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值