Tonight I tried to play with QT's QModel concept.  It had stumped me
for quite sometime at work today.  I couldn't rest untill I had
understood the basics.  I'm not sure if this will be usefull to the
hoi polloi but some may find it useful.

Anyways, heres a listView using a QDirModel for reference.
Oh, and for those that are python/Qt gurus please comment if I'm doing
this the wrong way.

-Cheers
Dave

## ----------------------------------------------

from PyQt4 import QtCore, QtGui
import sys
import os

class UI(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('listView ModelView Example')
        self.listView = MyListView()
        self.upButton = QtGui.QPushButton()
        self.upButton.setText("Up")

        grid = QtGui.QGridLayout()
        grid.addWidget(self.upButton)
        grid.addWidget(self.listView)

        self.setLayout(grid)

        self.resize(300, 150)

        items = self.listView.getModelItemCollection()
        print self.listView.DirModel.getData(items)

        self.connect(self.upButton, QtCore.SIGNAL("clicked()"),
self._GoUp)

    def _GoUp(self):
        path = self.listView.DirModel.filePath(self.listView.rootIndex
())
        self.listView.setRootIndex(self.listView.DirModel.index
( os.path.dirname(str(path))))

    @staticmethod
    def Display():
        app = QtGui.QApplication(sys.argv)
        win = UI()
        win.show()
        sys.exit(app.exec_())

class MyDirModel(QtGui.QDirModel):
    '''
    SubClass of QtGui.QDirmodel
    '''
    def __init__(self):
        super(MyDirModel, self).__init__()

    def getData(self, ModelIndex):
        '''
        Using QModelIndex I can get data via the data() method or
        via any other method that suport a QModelIndex
        '''
        paths = []
        if isinstance(ModelIndex, list):
            for items in ModelIndex:
                #print self.data(items).toString()
                paths.append(self.filePath(items))
            return paths
        else:
            raise ValueError("getData() requires a list
(QtGui.QModelIndexs)")

class MyListView(QtGui.QListView):
    '''
    SubClass of QtGui.QListView
    '''

    def __init__(self, parent = None):
        super(MyListView, self).__init__(parent)
        self.DirModel = MyDirModel()
        self.setModel(self.DirModel) # we have to set the listView to
use this DirModel
        self.setRootIndex(self.DirModel.index("c://")) # set the
deafault to load to c:\

        self.connect(self, QtCore.SIGNAL("doubleClicked
(QModelIndex)"), self._DoubleClicked)

    def getModelItemCollection(self):
        '''
        From this list get the QModelIndex that we set
with .setRootIndex
        Using QModelIndex and DirModel we can get all the elements at
that Index
        '''
        ModelIndex = self.rootIndex()
        ModelIndexCollection = []
        for i in range(0, self.DirModel.rowCount(ModelIndex)):
            ModelIndexCollection.append(ModelIndex.child(i,0))
        return ModelIndexCollection

    def _DoubleClicked(self):
        if self.DirModel.isDir(self.currentIndex()):
            path = self.DirModel.filePath(self.currentIndex())
            self.setRootIndex(self.DirModel.index(path))
            items = self.getModelItemCollection()
            print self.DirModel.getData(items)

if __name__ == "__main__":
    UI.Display()


--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---

Reply via email to