我有一个连接到QAbstractTableModel子类的QTableView。我正在编辑模型拥有的数据以响应不同控件(不是QTableView)中的用户输入,然后我在模型上调用一个方法来发出dataChanged事件:
void CharacterModel::characterChanged(int idx)
{
emit dataChanged(index(idx, 0), index(idx, (int)kNumColumns));
}
只要QTableView是专注的,这就有效。一旦不是,它就不再显示更新的数据。如果我再次关注它,它会立即更新。例如,我修改了调用上面方法的代码,然后在表视图上调用setFocus(),一切都很好 - 除了我的编辑控件每次做任何事情都失去焦点。不好。我有几个编辑控件,包括旋转框;如果我点击旋转框箭头,将显示FIRST更新(因为表格视图仍然是聚焦的),但旋转框会聚焦,所有后续更改都不会显示。
有人知道发生了什么事吗?这似乎是非常明确的行为,但我无法在任何地方找到任何引用。
谢谢, 亚伦
答案 0 :(得分:3)
我想我已经解决了这个问题。事实证明解决方案是在dataChanged事件触发后调用tableView-> viewport() - > repaint()。调用tableView-> repaint()不会这样做。