编辑QTableVi时捕获ESC键

2024-04-28 08:10:55 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在正在编辑的QTableView中捕获行时遇到问题,但已被取消。例如,如果我在QTableView中编辑一个新插入的行,并且按下了ESC、up/down箭头键,那么我需要删除该行,因为(在我看来)已经被取消了。如果用户单击离开行,也保持true。我真的不能发布任何代码,因为我不知道如何实现这样的东西。有什么想法吗?在


Tags: 代码用户true编辑downup行时箭头键
1条回答
网友
1楼 · 发布于 2024-04-28 08:10:55

我有一个例子,我相信,是你想要的(至少对于按键问题)。从那里你可以做一些类似的点击问题。在

我的解决方案使用一个自定义的QItemDelegate重写eventFilter方法。它还使用了一个朴素的模型(因为您希望使用QTableView),在模型上使用layoutChanged信号是由于示例的功能,请根据需要阅读文档以获得更合适的添加/删除数据特性。在

希望有帮助。在

示例用户界面:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui',
# licensing of 'test.ui' applies.
#
# Created: Wed Nov  7 16:10:12 2018
#      by: pyside2-uic  running on PySide2 5.11.0
#
# WARNING! All changes made in this file will be lost!

from PySide2 import QtCore, QtGui, QtWidgets

class Ui_Test(object):
    def setupUi(self, Test):
        Test.setObjectName("Test")
        Test.resize(538, 234)
        self.horizontalLayout = QtWidgets.QHBoxLayout(Test)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.tableView = QtWidgets.QTableView(Test)
        self.tableView.setObjectName("tableView")
        self.gridLayout.addWidget(self.tableView, 0, 0, 1, 1)
        self.addRow = QtWidgets.QPushButton(Test)
        self.addRow.setObjectName("addRow")
        self.gridLayout.addWidget(self.addRow, 0, 1, 1, 1)
        self.horizontalLayout.addLayout(self.gridLayout)

        self.retranslateUi(Test)
        QtCore.QMetaObject.connectSlotsByName(Test)

    def retranslateUi(self, Test):
        Test.setWindowTitle(QtWidgets.QApplication.translate("Test", "Dialog", None, -1))
        self.addRow.setText(QtWidgets.QApplication.translate("Test", "add row", None, -1))

实际涉及的类(我使用PySide2):

^{pr2}$

相关问题 更多 >