2015-11-26 4 views
0

Я попытался установить QLineEdit на подклассы QItemDelegate в первом ряду моего QTableView:Как подключить QItemDelegate (QLineEdit) к QSortFilterProxyModel PyQt4?

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 функции в главном классе?

ответ

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 
+0

давайте уясним, в этой картинке: HTTP: //oi67.tinypic.com/dxxwkk.jpg я тусклый, чтобы переместить мой поиск строки редактирования внутри таблицы (дополнительная ячейка или поле в верхней части столбца). Скажите, пожалуйста, что именно мне нужно? я не могу найти что-либо из Интернета – IMAN4K

+0

Я считаю, что у вас есть вся информация, которая вам нужна, чтобы делать то, что вы хотите, с этим ответом и вашим предыдущим вопросом. Может быть, вы путаетесь, как установить делегат для строки вместо столбца? – Mel

+0

Запутанная часть дает делегату изменение (изменение текста на линии) для self.table_proxy_model.setFilterRegExp (поиск) в качестве поиска – IMAN4K

 Смежные вопросы

  • Нет связанных вопросов^_^