QTableView中QLineEdit的最终版本信号

时间:2012-11-28 10:55:00

标签: pyqt

我好几天都遇到了问题。我正在使用QTableView来显示模型中的数据。当用户单击一个单元格时,我激活了完整的行选择,使界面用户友好:     self.tableau.selectRow(element.row())

但是,当用户按下F2时,我只想编辑第1列。因此,预期的行为是:

  • 如果我选择了第4列,则此列不可编辑
  • 如果在选择第4列时按F2,则编辑第1列

但是通过完整的行选择,F2无法知道选择了哪个单元格。所以,我重新实现了事件处理程序:

def keyPressEvent(self, e):
    """It reimplements event management in this method """

    # TODO: find a way to re-select the cell after editing

    # We get the name of current file
    nom_courant = self.tableau.model().index(self.row_selected, 1).data()
    print(nom_courant)

    if e.key() == QtCore.Qt.Key_F2:

        try:
            # We edit the cell name of the selected line
            #http://stackoverflow.com/questions/8157688/specifying-an-index-in-qtableview-with-pyqt
            self.tableau.edit(self.tableau.model().index(self.row_selected, 1))
        except:
            print("Pas de cell sélectionnée")
            pass

    # It retrieves the new file name. CAN NOT do in the
    # if the model is not updated yet.
    nouveau_nom = self.tableau.model().index(self.row_selected, 1).data()
    print(nouveau_nom)

    # Call the fct renaming only if the name has changed
    if nom_courant != nouveau_nom:
        #liste.renameFile(self.current_video, self.tableau.model().index(self.row_selected, 1).data())
        print("entropie")

现在的问题是这一行:

self.tableau.edit(self.tableau.model().index(self.row_selected, 1))

我无法检测生成的QLineEdit版本的结尾,我需要它来对编辑的单元格的新内容执行操作,因为如果没有键盘事件发生,则不会更新nouveau_nom。

您对如何获得最终版本信号有所了解吗?

(请原谅我的英语,我是法国人......)

1 个答案:

答案 0 :(得分:1)

首先,您不需要实际拦截并将单元格选择更改为行选择。你可以在视图上set the behavior

self.tableau.setSelectionBehavior(self.tableau.SelectRows)

这将自动选择行。

当您在表中使用自定义QLineEdit小部件时,您需要将QLineEdit.editingFinished()连接到您想要的任何处理程序。您很可能希望它在您的模型上调用dataChanged