QStandardItemModel itemChanged 未调用

QStandardItemModel itemChanged not called

在 QTreeView 中使用 QStandardItemModel,不会触发 itemChanged 信号(例如在重命名时)。如果我没记错的话,这是在更早的 PyQt5 版本中运行的。

class Main(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.resize(200, 100)
        self.dataTree = QTreeView(self)
        self.dataTree.setSelectionMode(QAbstractItemView.SingleSelection)
        self.dataTree.resize(200, 100)
        self.dataModel = QStandardItemModel(self.dataTree)
        self.dataModel.setHorizontalHeaderLabels(['Sources'])
        self.dataModelParent = self.dataModel.invisibleRootItem()
        self.dataTree.setModel(self.dataModel)
        self.dataModel.itemChanged.connect(lambda: self.itemChanged)

        master = QStandardItem('test1')
        self.dataModel.appendRow(master)
        
    @pyqtSlot(QStandardItem)
    def itemChanged(self, item):
        print('Item Changed')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = QMainWindow()
    Main = Main()
    Main.show()
    app.exec_()

考虑这条线...

self.dataModel.itemChanged.connect(lambda: self.itemChanged)

在这里,您的 lambda 实际上没有做任何事情。相反,您需要类似...

self.dataModel.itemChanged.connect(lambda item: self.itemChanged(item))