我尝试通过在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
函数?
答案 0 :(得分:2)
您不应该连接到委托中的line_edit
。委托是在QTableView
的多个单元格中设置自定义编辑器(此处为第0列中的所有单元格)。
如果您可以连接到代理中的line_edit
,您如何知道哪个单元格已被更改?
您想要知道列0中的单元格何时更改。每个模型都有dataChanged
信号:
void 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