編集が完了すると、デリゲートはSubmitModelCache
ヒントのcloseEditor()
信号を送信します。モデルを適切に更新するには、この動作を維持する必要があります。あなたがQItemDelegate::eventFilter()
を再実装でき、前の編集からのデータをコミットした後
次のセルですぐに開いて編集者に私はちょうどQAbstractItemView::closeEditor()
方法再実装する多くは、より簡単に見つける:でも簡単に解決策は以下のようになり
void CMyTableView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)
{
QTableView::closeEditor(editor, hint);
QModelIndex index = moveCursor(MoveNext, Qt::NoModifier);
if (!index.isValid())
return;
QPersistentModelIndex persistent(index);
selectionModel()->setCurrentIndex(persistent, flags);
// currentChanged signal would have already started editing
if (index.flags() & Qt::ItemIsEditable && (!(editTriggers() & QAbstractItemView::CurrentChanged)))
edit(persistent);
}
を(私はそれについてはよく分からないですが、それは間違いなく試してみる価値はあります):
void CMyTableView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)
{
QTableView::closeEditor(editor, hint);
QTableView::closeEditor(nullptr, QAbstractItemDelegate::EditNextItem);
}
moveCursor()
方法は、次の列と同じ行のインデックスを返します。あなたはこの動作を変更したい場合は、それを再実装:
QModelIndex CMyTableView::moveCursor(CursorAction action, Qt::KeyboardModifiers modifiers)
{
if (action == QAbstractItemView::MoveNext)
action = QAbstractItemView::MoveDown;
else if (action == QAbstractItemView::MovePrevious)
action = QAbstractItemView::MoveUp;
// Next row, same column.
return QTableView::moveCursor(action, modifiers);
}
ところで:あなたがタブキーを押すと、デフォルトQTableView
動作は、データが保存され、次回、現在のエディタが閉じているということですセルが編集されます。
あなたがしなければならないのは、ちょうどQTableView::moveCursor()
メソッドを再実装するだけです。