2013-11-28 2 views
3

У меня есть QTableView, который подключен к подклассу QAbstractTableModel. Я редактирование данных, принадлежащие модель в ответ на пользовательский ввод в другом элементе управления (не QTableView), а затем я вызов метода на модели, которая испускает dataChanged события:QTableView не отвечает на dataChanged, когда не сфокусирован

void CharacterModel::characterChanged(int idx) 
{ 
    emit dataChanged(index(idx, 0), index(idx, (int)kNumColumns)); 
} 

Этих работает, пока фокусируется QTableView. Как только это не так, он больше не показывает обновленные данные. Если я снова сосредоточусь на нем, он немедленно обновится. Например, я изменил свой код, который вызывает вышеупомянутый метод, чтобы вызвать setFocus() в представлении таблицы сразу, и все в порядке - за исключением того, что мой контроль редактирования теряет фокус каждый раз, когда я что-то делаю. Не в порядке. У меня есть несколько элементов управления, в том числе спин-боксы; если я нажму на стрелку со стрелкой, появится FIRST-обновление (потому что табличное представление все еще сфокусировано), но затем прямая ячейка фокусируется, и все последующие изменения не отображаются.

У кого-нибудь есть идеи, что происходит? Это, по-видимому, очень четкое поведение, но я нигде не могу найти ссылки на него.

Спасибо, Аарон

+0

Вы пытались вызвать 'update()' на свой 'QTableView' после того, как передан сигнал DataChanged? – vahancho

+0

Пробовал - не имеет значения. – phrixus

ответ

3

Я думаю, что я решил это. Оказывается, решение заключается в вызове tableView-> viewport() -> repaint() после возникновения события dataChanged. Вызов tableView-> repaint() не делает этого.

+0

Ничего себе, это довольно хромая ошибка! Присоединение к событию 'dataChanged' моей модели и вызов того, что вы предлагаете, исправили ее для меня. –

Смежные вопросы