У Вас проблемы из-за реализации слота:
virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
На самом деле, если выделить новую строку и свернуть/развернуть приложение, то можно увидеть, что новая строка выделяется...
П.С.: можно в конце этого слота, вызвать метод родительского класса.
Ага, спасибо, что-то я ступил. Для отладки отключил все коннекты - не помогло. Тогда для всех обработчиков прописал return в самое начало. Получилось, что selectionChanged() переопределен ничего не делающим методом, а метод базового класса как не вызывался. так и не вызывается. Исправил. Теперь при клике выделяется нормально вся строка.
Но осталась проблема. Сейчас при старте программы в этой таблице выделяется одна ячейка, несмотря на то, что я в конструктор перенес настройку
setSelectionBehavior(QAbstractItemView::SelectRows);
Вообще не могу придумать как исправить. Вызывать искуственно selectionChanged() на ту же самую строку сразу после создания объекта - это как-то вообще криво. Есть стандартное решение?
Если быть более точным, то программная установка засветки на нужной строке с номером pos (в первой колонке):
QModelIndex selIdx=recordModel->index(pos, 0);
selectionModel()->setCurrentIndex(selIdx, QItemSelectionModel::ClearAndSelect);
вызывает выделение одной ячейки, а не всей строки. Несмотря на настройку setSelectionBehavior(QAbstractItemView::SelectRows).