[Development] The rowsAboutToBeRemoved signal in ListModel
Ben Lau
xbenlau at gmail.com
Fri May 16 06:33:49 CEST 2014
Hi all,
If I understand correctly , the rowsAboutToBeRemoved signal of
QAbstactItemModel should be emitted before the rows are actually removed.
So the row should be still accessible when you got the signal.
However, I found that implementation of ListModel (QQmlListModel) does not
follow the rule. The rows are already removed when you got the
rowsAboutToBeRemoved signal
Actual program flow:
QQmlListModel::remove(i)
--> remove the data
--> emit rowsAboutToBeRemoved
--> emit rowsRemoved
The expected program flow:
QQmlListModel::remove(i)
--> emit rowsAboutToBeRemoved
--> remove the data
--> emit rowsRemoved
Why? Is there any special reason to implement in this order? or it is a bug?
Thank for any advise.
The code to proof the problem:
import QtQuick 2.0
import QtTest 1.0
TestCase {
Component {
id : exampleModel
ListModel {
}
}
function test_aboutToBeRmoved(){
var model = exampleModel.createObject(this);
model.onRowsAboutToBeRemoved.connect(function() {
expectFail("","The item is already removed?");
compare(model.count,4);
});
for (var i = 0 ; i < 4;i++)
model.append({value : i});
model.remove(1);
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20140516/26b69fbf/attachment.html>
More information about the Development
mailing list