【问题标题】:model.setItem() emits signal model.itemChanged() causes loopmodel.setItem() 发出信号 model.itemChanged() 导致循环
【发布时间】:2015-09-27 21:04:20
【问题描述】:

为了填写QTableView()我使用setItem(r, c, item)方法

table = QTableView()
model = QStandardItemModel()
table.setModel(model)
item = QStandardItem("some value")
model.setItem(r, c, item)

我用它来填充QTableView() 与从字典中获取的数据。 另外,如果我直接在QtableView() 中手动更改项目,我会使用信号itemChanged() 来调用执行某些操作的函数。

问题是调用了itemChanged() 方法,当从字典更新项目时也是如此。所以导致程序循环 虽然如果我使用model.appendRow([one , two, three]) 来填充表格,itemChanged() 不会发出信号

有什么办法可以解决吗?

【问题讨论】:

    标签: qt model pyqt signals qtableview


    【解决方案1】:

    当您从 GUI 编辑项目数据时,请使用 dataChanged() 信号

    【讨论】:

    • col_c = table.model().columnCount() row_c = table.model().rowCount() table.dataChanged(table.model().index(0, 0), table.model().index(row_c - 1, col_c - 1)).connect(self.ChangeDnPItem) 不起作用。我做错了什么?
    • model.dataChanged 也会导致循环
    • 那么,出了什么问题?为了填充 View() 我必须使用 setItem() 它调用 dataChanged 或 itemChanged 信号。所以循环继续。是否有任何信号仅对应于 GUI 的变化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多