<div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hi<div><br></div><div>Thanks for advice. But, what will happen if one of ListView's will change model? Seems, that it will break unique connection within model and model's proxy, and other ListView will not receive any signals.</div><div><br></div><div>Thanks,</div><div>Ilya</div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">2016-09-11 18:45 GMT+03:00 Phil Thompson <span dir="ltr"><<a href="mailto:phil@riverbankcomputing.com" target="_blank">phil@riverbankcomputing.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>On 25 Aug 2016, at 2:41 pm, Ilya Volkov <<a href="mailto:nxsofsys@gmail.com" target="_blank">nxsofsys@gmail.com</a>> wrote:<br>
><br>
> Hi<br>
><br>
> If QAbstractItemModel registered in qml and created in qml, it is not possible to<br>
> use same model in two or more lists, because item inserting cause multiple signal<br>
> propagation to lists.<br>
><br>
> I've done example:<br>
><br>
> Python script:<br>
><br>
> import sys<br>
> from PyQt5.QtCore import QUrl<br>
> from PyQt5.QtWidgets import QApplication<br>
> from PyQt5.QtQuick import QQuickView<br>
> from PyQt5.QtCore import QAbstractItemModel<br>
> from PyQt5.QtQml import qmlRegisterType<br>
> from PyQt5.QtCore import Qt<br>
> from PyQt5.QtCore import pyqtSlot<br>
> from PyQt5.QtCore import QModelIndex<br>
><br>
> class ExampleModel(QAbstractItemMode<wbr>l):<br>
><br>
>     def __init__(self, parent, **kwargs):<br>
>         super().__init__(parent=paren<wbr>t, **kwargs)<br>
>         self.row_count = 0<br>
><br>
>     def rowCount(self, index):<br>
>         return self.row_count<br>
><br>
>     @pyqtSlot(int, name='doInsert')<br>
>     def do_insert(self, count):<br>
>         self.beginInsertRows(QModelIn<wbr>dex(), self.row_count, self.row_count+count-1)<br>
>         self.row_count += count<br>
>         self.endInsertRows()<br>
><br>
>     def index(self, row, col, index):<br>
>         return self.createIndex(row, col)<br>
><br>
>     def roleNames(self):<br>
>         return {Qt.UserRole: b'value'}<br>
><br>
>     def data(self, index, role=Qt.DisplayRole):<br>
>         if index.row() < self.row_count:<br>
>             return 'Correct index'<br>
>         return 'Wrong index'<br>
><br>
> if __name__ == '__main__':<br>
>     myApp = QApplication(sys.argv)<br>
>     qmlRegisterType(ExampleModel, "EXAMPLE.Models", 1, 0, "ExampleModel")<br>
>     content = QQuickView()<br>
>     content.setSource(QUrl('examp<wbr>le.qml'))<br>
>     content.show()<br>
>     myApp.exec_()<br>
>     sys.exit()<br>
><br>
> example.qml:<br>
><br>
> import EXAMPLE.Models 1.0<br>
> import QtQuick.Controls 1.4<br>
> import QtQuick 2.6<br>
><br>
> Item {<br>
>     width: 600<br>
>     height: 500<br>
><br>
>     ExampleModel {<br>
>         id: exampleModel<br>
>     }<br>
>     Column {<br>
>         Row{<br>
>             ListView {<br>
>                 width: 200<br>
>                 height: 300<br>
>                 model: exampleModel<br>
>                 delegate: Text {<br>
>                     text: value<br>
>                 }<br>
>             }<br>
>             ListView {<br>
>                 width: 200<br>
>                 height: 300<br>
>                 model: exampleModel<br>
>                 delegate: Text {<br>
>                     text: value<br>
>                 }<br>
>             }<br>
>         }<br>
><br>
>         Button {<br>
>             text: "click me"<br>
>             onClicked: exampleModel.doInsert(1)<br>
>         }<br>
>     }<br>
> }<br>
><br>
><br>
> I think there is error in QPyQmlObjectProxy::connectNoti<wbr>fy - every<br>
> time when ListView connects to QPyQmlObjectProxy it duplicates<br>
> connection to proxied model, as result proxied model's signal invokes<br>
> connection more than one time.<br>
><br>
<br>
</div></div>Adding Qt::UniqueConnection to the connect() call within connectNotify() seems to fix it.<br>
<br>
Thanks,<br>
Phil<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div data-smartmail="gmail_signature">Ilya Volkov<br><a href="mailto:nxsofsys@gmail.com" target="_blank">nxsofsys@gmail.com</a></div>
</font></span></div>
</div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Ilya Volkov<br><a href="mailto:nxsofsys@gmail.com" target="_blank">nxsofsys@gmail.com</a></div>
</div>