2016-10-05 2 views
0

아래 제공된 코드에서 현재 qtreeview 항목에 하위 항목을 추가하려면 어떻게합니까? 나는 이런 식으로 뭔가를보고 싶어 :qtreeview 하위 항목을 추가하려면 어떻게합니까

enter image description here

아래의 코드를 정렬하지만, 어린이 항목을 추가하는 방법에 전적으로 명확 메신저 된 트 리뷰를 작성합니다. 고마워요, 고마워요.

import sys 
from PySide import QtGui, QtCore 

class SortModel(QtGui.QSortFilterProxyModel): 

    def __init__(self, *args, **kwargs): 
     super(SortModel, self).__init__(*args, **kwargs) 

    def lessThan(self, left, right): 
     leftData = self.sourceModel().data(left) 
     rightData = self.sourceModel().data(right) 

     if leftData: 
      leftData = leftData.lower() 
     if rightData: 
      rightData = rightData.lower() 

     print('L:', leftData, 'R:', rightData) 
     return leftData < rightData 


class Browser(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Browser, self).__init__(parent) 

     self.initUI() 

    def initUI(self): 
     self.resize(200, 300) 
     self.setWindowTitle('Assets') 
     self.setModal(True) 

     self.results = "" 

     self.uiItems = QtGui.QTreeView() 
     self.uiItems.setAlternatingRowColors(True) 
     self.uiItems.setSortingEnabled(True) 
     self.uiItems.sortByColumn(0, QtCore.Qt.AscendingOrder) 
     self.uiItems.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) 
     self.uiItems.header().setResizeMode(QtGui.QHeaderView.ResizeToContents) 
     self._model = self.create_model(self) 
     self._spmodel = SortModel(self) 
     self._spmodel.setSourceModel(self._model) 
     self._spmodel.setDynamicSortFilter(True) 
     self.uiItems.setModel(self._spmodel) 

     grid = QtGui.QGridLayout() 
     grid.setContentsMargins(0, 0, 0, 0) 
     grid.addWidget(self.uiItems, 0, 0) 
     self.setLayout(grid) 

     self.setLayout(grid) 

     self.uiItems.doubleClicked.connect(self.doubleClickedItem) 
     self.show() 

    def doubleClickedItem(self, item): 
     name = item.data(role=QtCore.Qt.DisplayRole) 
     print name 

    def create_model(self, parent): 

     items = [ 
      'Cookie dough', 
      'Hummus', 
      'Spaghetti', 
      'Dal makhani', 
      'Chocolate whipped cream' 
     ] 

     model = QtGui.QStandardItemModel() 
     model.setHorizontalHeaderLabels(['Name']) 

     for item in items: 
      model.appendRow(QtGui.QStandardItem(item)) 


     return model 

    def showEvent(self, event): 
     geom = self.frameGeometry() 
     geom.moveCenter(QtGui.QCursor.pos()) 
     self.setGeometry(geom) 
     super(Browser, self).showEvent(event) 

    def keyPressEvent(self, event): 
     if event.key() == QtCore.Qt.Key_Escape: 
      # self.hide() 
      self.close() 
      event.accept() 
     else: 
      super(Browser, self).keyPressEvent(event) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = Browser() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

답변

1

create_model 메소드에서이를 수행합니다. 자식 행과 열을 추가하는 방법에는 여러 가지가 있습니다. QStandardItem을 model.appendRow에 직접 전달하는 대신 생성하여 변수에 저장하십시오. 그런 다음 QStandardItem.appendRow를 사용하여 최상위 행에 하위 항목을 추가 할 수 있습니다.

파이썬을 모르고 구문이 잘못 구할 수 있지만 기본 패턴은 다음과 같이이다 :

std_item = QtGui.QStandardItem ("Dinner") 
child_std_item = QtGui.QStandardItem ("Drinks") 
std_item.appendRow (child_std_item) 

다른 방법으로, 당신은 model.insertRow를 사용하여 모델 수준에서이 작업을 수행하여 지정할 수 있습니다 상위 항목의 QModelIndex. model.indexFromItem을 사용하여 항목의 QModelIndex를 가져올 수 있습니다. 바라기 만하면 그걸로 충분 해. 각 QStandardItem은 부모 (있는 경우)와 자식을 알고 있으므로 대개 자식을 추가/변경/제거 할 수있는 부모가 있어야합니다.

관련 문제