Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何判断何时修改QTableWidgetItem_Python_Qt_Pyqt_Pyside - Fatal编程技术网

Python 如何判断何时修改QTableWidgetItem

Python 如何判断何时修改QTableWidgetItem,python,qt,pyqt,pyside,Python,Qt,Pyqt,Pyside,我正在用PySide库用Python编写一个应用程序。我有一个大约每秒更新一次的QTableWidget。问题是,我希望能够手动更改数据,并且我认为如果我能够发现用户是否正在更改单元格中的数据,那么我可以阻止程序更新此单元格。否则每次更新我都会被“踢出”牢房 这是个好主意吗?我应该试试别的吗?为什么 我怎样才能实现我的目标 非常感谢 编辑: 我知道存在一个itemChanged信号,但我真正想知道的是,是否有一种方法可以告诉用户何时在单元格中写入新值,以便在编辑时不将其踢出。在Qt文档中:

我正在用PySide库用Python编写一个应用程序。我有一个大约每秒更新一次的
QTableWidget
。问题是,我希望能够手动更改数据,并且我认为如果我能够发现用户是否正在更改单元格中的数据,那么我可以阻止程序更新此单元格。否则每次更新我都会被“踢出”牢房

  • 这是个好主意吗?我应该试试别的吗?为什么

  • 我怎样才能实现我的目标

非常感谢


编辑:

我知道存在一个
itemChanged
信号,但我真正想知道的是,是否有一种方法可以告诉用户何时在单元格中写入新值,以便在编辑时不将其踢出。

在Qt文档中:

作废QTableWidget::itemChanged(QTableWidgetItem*item)
每当项目数据发生变化时,就会发出此信号。

希望这对你有帮助

编辑:

QTableWidget使用默认的itemdelegate(QItemDelegate实例),该实例具有createEditor方法和closeEditor信号

您可以重新实现createEditor,这意味着编辑开始,并连接signal closeEditor,这意味着编辑结束


这可能是正确的方法。

通常,您可以使用来处理这种情况,它允许您控制用户可以编辑哪些单元格,为它们提供哪些类型的控件来编辑单元格,并且您可以捕获它们输入的数据,并在将其保存到模型之前验证或操作这些数据

QItemDelegates
仅控制使用视图界面进行的编辑。如果以编程方式更新表,则更改不会发送到
QItemDelegate


对于一个
QTableWidget

QItemDelegate
,对于同一个单元格,您有两个可能的源来更改它,每秒钟由程序更新一次,同时,您允许用户更改它。最终的结果有时是,一个人想要踩到另一个人的脚趾。我知道这一点,但是当项目被更改时会发生什么呢?简单地说,您可以连接信号“cellDoubleClicked”,这意味着用户已经进入编辑模式,并将“IsEdit”等标志设置为True。另外,您需要在tablewidgetclass中实现“mousePressEvnet”和“focusOutEvent”,将“IsEdit”设置为False,这意味着用户已完成编辑。希望这对您有所帮助。