Ok, I have to post my code because your suggest doesn't work (probably i miss something).


class DomModel(QtCore.QAbstractItemModel):
    def __init__(self, document, parent = None):
        QtCore.QAbstractItemModel.__init_ _(self, parent)

        self.domDocument = document   ##this is a QDomDocument object

        self.rootItem = DomItem(self.domDocument, 0)

     ## some useful methods
    def columnCount(self, parent):
    def data(self, index, role):
    def headerData(self, section, orientation, role):
    def index(self, row, column, parent):
    def parent(self, child):
    def rowCount(self, parent):
    def findNodeByTagNameID(self,tagName,id):
    def validateDom(self,nodo):


    def removeRows(self,arow,count,parent):
         
          self.beginRemoveRows(parent,arow,arow+count-1)
   
                for ii in range(count):
                     ##code for removing a row from QDomDocument here
         
          self.endRemoveRows()
          return True
       


This is my model class. When i remove a row the qtreeview repaint the tree but the row deleted isn't the one i've selected.
example:

the treeview show:

document
     element1
     element2
     element3

pick  elements2 for removing.

treeview update after removing but show:

document
    element1
    element2



Now, if i do:

print  qtreeview.model().domDocument.toString() 

the result is:

document
     element1
     element3

so, the model is changed right. the removed element is the one that i picked.

Any idea?


p.s. apologise for my english...hope it's understandable
   



2006/9/8, Andreas Pakulat < [EMAIL PROTECTED]>:
On 08.09.06 10:38:51, Oscar Cossu wrote:
> thank you for the advice, I have read the doc again (and again and again).
> Now, I use a QTreeView ,what i have to do ?
>
> QTreeView::rowsAboutToBeRemoved(param)
>
> treeviewobj.model ().removeRow(param)
>
> QTreeView::rowsRemoved(param)

No.

> or just call removeRow() that call itself beginRemoveRow and endRemoveRow  ?

Well, you said you have your own model, don't you? In there you've got
your removeRows() function. If that one is implemented by doing
something like

beginRemoveRows(parent(), beginRow, endRow);
<code that deletes the stuff from the underlying data, i.e. the xml tree>
endRemoveRows();

Then you're done. You can now use the model's removeRows() function to
remove rows. The same works for columns.

If it still doesn't work for you, please consider posting the important
parts of your model. (i.e. leave out the data, index, parent, *count
functions).

Andreas

> 2006/9/7, Andreas Pakulat <[EMAIL PROTECTED]>:
> >
> >On 07.09.06 16:44:23, Oscar Cossu wrote:
> >> Hy all,  I set the model of a QTreeView with an object that is a
> >subclass of
> >> QAbstractItemModel.
> >> When I change the model (ex. deleting a row) and emit layoutChanged()
> >> signal, the treeModel should update the view, but errors occur.
> >
> >Read the Qt documentation on model/view again. You shouldn't use
> >layoutChanged() but call QAbstractItemModel::beginRemoveRows() and
> >::endRemoveRows (the same for inserting rows).
> >
> >Andreas
> >
> >--
> >Accent on helpful side of your nature.  Drain the moat.
> >
> >_______________________________________________
> >PyKDE mailing list    [email protected]
> >http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
> >

> _______________________________________________
> PyKDE mailing list    [email protected]
> http://mats.imk.fraunhofer.de/mailman/listinfo/pykde


--
Keep it short for pithy sake.

_______________________________________________
PyKDE mailing list     [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

_______________________________________________
PyKDE mailing list    [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to