-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 に答える