-1

几天来我一直面临一个问题。我正在使用 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 不会更新。

您对如何获得最终版本信号有任何想法吗?

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

4

1 回答 1

1

首先,您不需要实际截取单元格选择并将其更改为行选择。您可以在视图上设置行为:

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

这将自动选择行。

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

于 2012-11-28T20:31:14.520 回答