У меня есть QTableView, который подключен к подклассу QAbstractTableModel. Я редактирую данные, принадлежащие модели, в ответ на пользовательский ввод в другом элементе управления (не в QTableView), а затем вызываю метод в модели, который генерирует событие dataChanged:
void CharacterModel::characterChanged(int idx)
{
emit dataChanged(index(idx, 0), index(idx, (int)kNumColumns));
}
Это работает, пока QTableView сфокусирован. Как только это не так, он больше не показывает обновленные данные. Если я сфокусируюсь снова, он немедленно обновляется. Например, я изменил свой код, который вызывает вышеупомянутый метод, чтобы вызывать setFocus () для табличного представления сразу после этого, и все в порядке — за исключением того, что мой элемент управления для редактирования теряет фокус каждый раз, когда я что-либо делаю. Не хорошо. У меня есть несколько элементов управления для редактирования, в том числе спин-боксы; если я нажму на стрелку поля прокрутки, отобразится ПЕРВОЕ обновление (потому что представление таблицы все еще сфокусировано), но затем окно прокрутки будет сфокусировано, и все последующие изменения не отобразятся.
У кого-нибудь есть идеи, что происходит? Кажется, это очень четко определенное поведение, но я нигде не могу найти ссылку на него.
Спасибо,
Аарон
Я думаю, что я решил это. Оказывается, решение состоит в том, чтобы вызвать tableView-> viewport () -> repaint () после возникновения события dataChanged. Вызов tableView-> repaint () не делает этого.
Других решений пока нет …