Долго не могу добиться устранения глюка в своей программе. Глюк состоит в том, мой класс на базе QTableView ведет себя несколько по-разному при добавлении новой строки в модель данных в зависимости от того, пользуюсь я только мышкой при этом или пользуюсь клавиатурой.
Вот я создал строку в документе:
Вот добавил строку, пользуясь мышкой:
Фокус установился на столбце "Количество" как и должно быть.
А вот добавил строку, пользуясь клавиатурой:
Фокус текущей строки и ячейки куда-то убежал. Т.е. если пользоваться только мышкой, то программа работает нормально. Если пользоваться клавиатурой, то возникает вот такой неприятный эффект.
Добавление в обеих случаях происходит с помощью одного и того же куска кода:
int strNum = appendDocString(); // Открываем нужные справочники перед добавлением строки и добавляем строку в документ
// Возвращаем номер строки в документе
if (strNum > 0) // Если строка была добавлена
{
int newRow = tableModel->rowCount();
if (newRow == 0) // Если это первая строка в документе
{
query();
grdTable->selectRow(newRow);
}
else
{ // А если не первая, то добавим строку другим способом, позволяющим не загружать
int column = grdTable->currentIndex().column(); // таблицу с сервера целиком, а только вновь добавленную
tableModel->insertRow(newRow); // строку
grdTable->reset();
grdTable->selectRow(newRow);
updateCurrentRow(strNum); // Обновим строку в модели (загрузим с сервера)
grdTable->selectionModel()->setCurrentIndex(grdTable->currentIndex().sibling(newRow, column), QItemSelectionModel::Select);
}
...
Тут я подозреваю какое-то непонятное взаимодействие QTableView (и его QModelIndex) и моего обработчика нажатий клавиш keyPressEvent.
Подскажите, пожалуйста, в какую сторону копать, чтобы устранить глюк.