我正在使用PyQt,但我的问题是一般的Qt:
我有一个由函数updateTable设置的QTableWidget。它在调用时将数据从DATASET写入表中。不幸的是,这导致我的QTableWidget为每个单元格发出信号cellChanged()。
信号cellChanged()连接到函数on_tableWidget_cellChanged,该函数读取已更改单元格的内容并将其写回DATASET。这是允许用户手动更改数据所必需的。
因此,每次更新表时,其内容都会写回DATASET。
有没有办法区分用户或updateTable是否更改了单元格?
我想暂时用updateTable断开on_tableWidget_cellChanged,但这似乎有点脏。
答案 0 :(得分:6)
在类似的情况下,我刚刚使用了
bool QObject::blockSignals ( bool block )
bool QObject::signalsBlocked () const
在设置表格之前阻止信号,然后取消阻止:
myTable.blockSignals(True)
#blah-blah..
myTable.blockSignals(False)
答案 1 :(得分:1)
看来,这是QTableWidget中唯一至少4.6的信号。您可以发布功能请求,但我不知道它是否被接受,您可能会等待很长时间; - )
当内部更改单元格时,也许您可以尝试编写QTableWidget的子类并发出自己的信号。
无论如何,断开更新单元的时间并不是那么糟糕,因为你无法连接到特定的信号。
答案 2 :(得分:1)
我建议您使用适当的型号从QTableWidget
更改为QTableView
。从它的声音来看,你有一个数据库或其他数据对象,无论如何都要保存和排列数据,所以希望这样做很容易。这样您就可以区分编辑(模型上调用setData
)和更新(模型上调用data
)。