QTableWidget信号cellChanged():区分用户输入和按例程更改

时间:2010-03-12 10:02:39

标签: python qt pyqt signals qtablewidget

我正在使用PyQt,但我的问题是一般的Qt:

我有一个由函数updateTable设置的QTableWidget。它在调用时将数据从DATASET写入表中。不幸的是,这导致我的QTableWidget为每个单元格发出信号cellChanged()。

信号cellChanged()连接到函数on_tableWidget_cellChanged,该函数读取已更改单元格的内容并将其写回DATASET。这是允许用户手动更改数据所必需的。

因此,每次更新表时,其内容都会写回DATASET。

有没有办法区分用户或updateTable是否更改了单元格?

我想暂时用updateTable断开on_tableWidget_cellChanged,但这似乎有点脏。

3 个答案:

答案 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)。