编辑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。