0

我试图通过在我的 QtableView 的第一行中继承 QItemDelegate 来设置 QlineEdit:

class ExampleDelegate(QItemDelegate):
    def createEditor(self, parent, option, index):
        self.line_edit = QLineEdit(parent)
        return self.line_edit

class example(QDialog):
    def __init__(self):
        super(druglist, self).__init__()
        self.UI()
    def UI(self):
        self.table_view=QTableView()
        self.delegate = ExampleDelegate()   
        self.table_view.setItemDelegateForColumn(0, self.delegate)
        self.table_model=QStandardItemModel()

        self.table_proxy=QSortFilterProxyModel()
        self.table_proxy.setSourceModel(self.table_model)

        self.table_view.setModel(self.table_proxy)

        self.delegate.textChanged.connect(self.lineedit_textchange) //do something like this

     def lineedit_textchange(self,text):
        search=QRegExp(text,Qt.CaseInsensitive,QRegExp.RegExp)
        self.table_proxy_model.setFilterRegExp(search)

我只想知道如何将我的ExampleDelegate文本更改连接到lineedit_textchange主类中的函数?

4

1 回答 1

2

您不应连接到line_edit委托中的 。代表在这里是在您的多个单元格中设置自定义编辑器QTableView(这里是第 0 列中的所有单元格)。如果您可以连接到line_edit委托中的 ,您如何知道哪个单元格已更改?

您想要知道第 0 列中的单元格何时更改。每个模型都有dataChanged信号:

无效 QAbstractItemModel::dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight)

只要现有项目中的数据发生更改,就会发出此信号。

您可以连接到此信号以获取刚刚更改的单元格的索引。您可以检查此单元格是否在第 0 列,然后进行相应操作:

def UI(self):
    self.model=QStandardItemModel(4,2)
    self.model.dataChanged.connect(self.on_dataChanged)

    self.delegate=Delegate()

    self.view=QTableView()
    self.view.setItemDelegateForColumn(0,self.delegate)
    self.view.setModel(self.model)

def on_dataChanged(self,index,index2):
    print(index,index2)
    print(index.data())
    print(index.column())
    if index==index2 and index.column()==0:
        #do stuff
于 2015-11-26T10:39:12.617 回答