首页| 论坛| 消息
主题:Qtableview 如何委托实现按下回车到下一行?
回帖:前段时间我也在做相同的需求:
if 按回车键
if 内容合法
if 不是在最后一行,则定位到下一行
if 是在最后一行,则增加一行,并定位到新增的行

一开始也是想在delegate里面实现,但尝试后还是改在主程序里去处理了,主要是好判断及定位tableView的当前位置
tableView->installEventFilter(this);
evenFilter的代码大概如下, 供参考.
你也可以继续在delegate里尝试,有结果后再跟大家分享一下

//当用户在tableViewXXX的最后一行按向下键或回车键时,新增加一行
bool xxxEditor::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast(event);
QModelIndex index = ui->tableViewXXX->currentIndex();
if (keyEvent->key() == Qt::Key_Down || keyEvent->key() == Qt::Key_Return
|| keyEvent->key() == Qt::Key_Enter) {
QString XXXCode = mXXXModel->data(index, Qt::EditRole).toString();
//如果输入的XXX代码正确
if (!XXXCode.isEmpty()) {
//如果当前是最后一行,则添加一行
if (index.row() == mXXXModel->rowCount() - 1) {
addXXXRow();
} else { //如果不是最后一行,则定位到下一行
index = mXXXModel->index(index.row() + 1, index.column());
ui->tableViewXXX->setCurrentIndex(index);
}
return true;
} else { //如果输入的XXX代码不正确, 则保持在当前行
return false;
}
}
}
return QObject::eventFilter(obj, event);
}
下一楼›:lastforest:我是想,能不能在eventFilter里捕获key_Return,然后发射信号,再在主程序里处理,但 ..
‹上一楼:我是想,能不能在eventFilter里捕获key_Return,然后发射信号,再在主程序里处理,但是我实在是 ..

查看全部回帖(5)
«返回主帖