<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Date: Sun, 6 Dec 2015 02:20:10 +0100<br>
From: <<a href="mailto:c.buhtz@posteo.jp" target="_blank">c.buhtz@posteo.jp</a>><br>
Subject: [PyQt] how to insertRow() in a QAbstractListModel?<br>
<br>
I have a QListView and created a QAbstractListModel-derived beside it.<br>
The model object just have a python string-list as data.<br>
<br>
As the docu tells me I tried to implement insertRows() and<br>
removeRows(). But I don't understand the logic behind it.<br>
<<a href="http://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows" rel="noreferrer" target="_blank">http://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows</a>><br>
<br>
The signature (arguments/parameters) of the method doesn't have data in.<br>
Where is the data to be inserted?<br><br></blockquote><div><br></div><div>Agree, this is not clear in the documentation.<br><br></div><div>A better overview is at <a href="http://doc.qt.io/qt-5/model-view-programming.html#model-classes" target="_blank">http://doc.qt.io/qt-5/model-view-programming.html#model-classes</a> (search on "insert").<br><br></div><div>What none of this says clearly is that insertRow() and insertRows() only add EMPTY rows to the model. You can see this (by implication) in the example in the above-linked page. It merely adds empty strings to a string list.<br><br></div><div>When will you populate the new empty rows with data? I am not sure. One possible answer is, when the View needs to display the data, it calls your data() method. That method could say, oh, there is no data in this row and column, I had better fetch some. How does your data() now locate the data for a given row and column? All it knows is the row and column numbers.<br><br></div><div>Be sure to read the discussion on beginInsertRows() (<a href="http://doc.qt.io/qt-5/qabstractitemmodel.html#beginInsertRows" target="_blank">http://doc.qt.io/qt-5/qabstractitemmodel.html#beginInsertRows</a>) and endInsertRows.<br><br></div><div>What will happen is, when you call endInsertRows(), almost immediately the View will figure out if any of the inserted rows are visible in the window, and it will call the model data() to get display values for the visible cells.<br><br></div></div></div></div>