Озадачился сабжем, вообщем-то ни каких проблем с первого взгляда нет, делаем:
comboBox.setView(someTreeView)
comboBox.setModel(someModel)
и надеемся на радость.. но нет, ведет себя крайне плохо, при попытках развернуть-свернуть (expand-collapse) ветки TreeView ComboBox сворачивается сам.
гуглинг подсказал ссылку:
http://lists.trolltech.com/qt4-preview-feedback/2008-02/thread00033-0.html update: доберусь до работы, если там не съедят моск юзера, то допилю до разумного состояния питоновский вариант и куда-нибудь выложу. ибо то, что сделано за 5 минут еще не совсем работает.
update2:
class TreeComboBox(QtGui.QComboBox):
def __init__(self, parent = None, column = None, model = None):
QtGui.QComboBox.__init__(self, parent)
self.view = QtGui.QTreeView(self)
self.view.header().hide()
self.setView(self.view)
self.view.viewport().installEventFilter(self)
self.ignoreHide = 0
if model:
self.setModel(model)
for i in range(0, model.columnCount(QtCore.QModelIndex())):
self.view.hideColumn(i)
self.view.showColumn(column)
def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.MouseButtonPress and object == self.view.viewport():
if not self.view.visualRect(self.view.indexAt(event.pos())).contains(event.pos()):
self.ignoreHide = 1
return 0
def showPopup(self):
self.setRootModelIndex(QtCore.QModelIndex())
QtGui.QComboBox.showPopup(self)
def hidePopup(self):
if self.ignoreHide:
self.ignoreHide = 0
else:
self.setRootModelIndex(self.view.currentIndex().parent())
self.setCurrentIndex(self.view.currentIndex().row())
QtGui.QComboBox.hidePopup(self)
print self.currentIndex()