2015-11-25 4 views
0

Так вот моя модель, вид и прокси-модель:Как поместить QLineEdit в ячейку QTableView PyQt4?

class example(QDialog): 
    def __init__(self): 
     super(druglist, self).__init__() 
     self.setMinimumWidth(745) 
     self.UI() 
    def UI(self): 
     self.table_view=QTableView() 
     self.table_model=QStandardItemModel() 
     self.table_proxy=QSortFilterProxyModel() 
     self.table_proxy.setSourceModel(self.table_model) 
     self.table_view.setModel(self.table_proxy) 

Я собираюсь поставить объекты QLineEdit для каждого столбца моей таблицы для фильтрации цели. Как мне это сделать?

+0

Вы имеете в виду редактирование линии для каждого элемента или только для заголовка столбца? – Photon

+0

Просто для заголовка столбца, например, для набора строк в первой строке таблицы. Поиск элементов в столбце через строку редактирования внутри таблицы (вместо поля поиска строки внешней строки) – IMAN4K

+0

Возможный дубликат [Использование QCompleter в QTableView с Qt и Python] (http://stackoverflow.com/questions/24947003/using-a-qcompleter-in-a-qtableview-with-qt-and-python) – Mel

ответ

1

A delegate может это сделать. Вот основной пример.

Делегат представления таблицы определяет, какой виджет следует использовать при редактировании ячейки. В этом примере делегат применяется только к первому столбцу. Виджет QLineEdit имеет ограничение символов 3, чтобы вы могли отличить его от других столбцов (которые в остальном выглядят одинаково).

class ExampleDelegate(QtGui.QStyledItemDelegate): 
    def createEditor(self, parent, option, index): 
     line_edit = QtGui.QLineEdit(parent) 
     line_edit.setMaxLength(3) 
     return line_edit 


class Example(QtGui.QDialog): 
    def __init__(self,): 
     super(Example, self).__init__() 
     self.build_ui() 

    def build_ui(self):  
     self.table_model = QtGui.QStandardItemModel(4, 2) 
     self.delegate = ExampleDelegate() 
     self.table_view = QtGui.QTableView() 
     self.table_view.setItemDelegateForColumn(0, self.delegate) 
     self.table_view.setModel(self.table_model) 

     self.layout.addWidget(self.table_view) 
     self.layout = QtGui.QGridLayout() 
     self.setLayout(self.layout) 
+0

Вы также можете заставить своего делегата вернуть QComboBox, если вы хотите предопределенный список опций @ IMAN4K – 101

+0

Большое вам спасибо. Но для моей общей цели (фильтрации для элемента столбца), как мне следует подключать line_edit.textChanged к моей прокси-модели (в subclassing ItemDelegate). Должен ли я использовать ItemDelegate по-другому? – IMAN4K

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