<div dir="ltr"><div dir="ltr"><div dir="ltr"><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"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div style="font-family:tahoma,sans-serif">If I did not make it clear I would remind you of one of my findings.  I start with Python <span style="font-family:monospace,monospace">datetime.date</span> variables.  I populate the model via <span style="font-family:monospace,monospace">setData(index, dateValue)</span> (no role specified, so <span style="font-family:monospace,monospace">EditRole</span>).  At this point no sorting happens.  However, all I have to do is change that to <span style="font-family:monospace,monospace">setData(index, QDate(dateValue))</span> and it <i>does</i> then work, so no "need to provide your own method".</div></div></div></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div style="font-family:tahoma,sans-serif"></div><div style="font-family:tahoma,sans-serif"><br></div><div style="font-family:tahoma,sans-serif">Why is that?  From <a href="http://doc.qt.io/qt-5/qsortfilterproxymodel.html#lessThan" target="_blank">http://doc.qt.io/qt-5/qsortfilterproxymodel.html#lessThan</a> I am told that the sorting deals in <span style="font-family:monospace,monospace">QVariant</span> types, and <span style="font-family:monospace,monospace">QMetaType::QDate</span> is among those it handles.  Now, you know much better than I, but everywhere else I use PyQt it seems to convert between Python types and necessary <span style="font-family:monospace,monospace">QVariant</span> types invisibly and all is well, but not here?  Why not?</div><div style="font-family:tahoma,sans-serif"><br></div></div></div></div></div></div></blockquote><div><br></div><div><div>Well, that's interesting: I've always assumed that the DisplayRole wouldn't accept data other than strings and numbers, but you made me realize that it can actually store any data that "supports" printable form (which QDate/Time do). Of course, this could be a small issue if you want a different string format for dates, but if the default one suits your needs, that's fine.<br>Since lessThan supports a small set of QVariant types (including QDate/Time) and we can use that QVariant type as a Display role, it's good enough.</div><div>Besides that, I tried to use setData with random QDateTimes converted QDate using their date() method, and it seems to work fine, without using QDate(dateValue) you mentioned.</div><div>To be clear, I tested with this code:</div><div><br></div><div><font face="monospace, monospace">sourceModel.setData(</font></div><div><font face="monospace, monospace">    sourceModel.index(row, 0), </font></div><div><font face="monospace, monospace">    QtCore.QDateTime().currentDateTime().addDays(-randrange(30)).addSecs(-randrange(86400)).date())</font></div><div> </div><div>I'm using an old Qt 5.7.1, it's possible that it's a regression, have you checked up on QtBugs?</div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div style="font-family:tahoma,sans-serif"></div><div style="font-family:tahoma,sans-serif">I'm also a little lost about <span style="font-family:monospace,monospace">QStandardItem</span> vs <span style="font-family:monospace,monospace">QStandardItemModel</span>, if that's significant.  My code creates the (source) model as a <span style="font-family:monospace,monospace">QStandardItemModel</span>.  That claims to use <a href="http://doc.qt.io/qt-5/qstandarditemmodel.html#setData" target="_blank">http://doc.qt.io/qt-5/qstandarditemmodel.html#setData</a>,whose default <span style="font-family:monospace,monospace">role</span> is <span style="font-family:monospace,monospace">EditRole</span>.  Nowhere do I create a <span style="font-family:monospace,monospace">QStandardItem</span> explicitly, whose <a href="http://doc.qt.io/qt-5/qstandarditem.html#setData" target="_blank">http://doc.qt.io/qt-5/qstandarditem.html#setData</a> uses default <span style="font-family:monospace,monospace">role</span> is <span style="font-family:monospace,monospace">UserRole + 1</span>.  So now I'm not sure which I am using, though I would think only <span style="font-family:monospace,monospace">QStandardItemModel</span>?  Is this of relevance to my issue?<br></div></div></div></div></div></div></blockquote><div><br></div><div>Well, I've always used empty models at start and fill them as needed, since I mostly use dynamic models or prefer to create data in this way. But that's one way.<br>It doesn't change much from creating a model (even specifying the size, if you can) and then create new rows/columns and setting the data directly from the model.</div><div>In this case, the QStandardItems do not exist until the internal indexes are created (trying to access any index is enough, for example by setting or reading data): if you try to access a item(0, 0) on a new QStandardItemModel with a specified size, it will return None. If you try a itemFromIndex(model.index(0,0)) it will return an item.</div><div>That said, I don't think it would change much in your case, as soon as you always use the right role when setting data. I think that the default UserRole + 1 of item.setData is just for convenience, but since you always use the model.setData methods that wouldn't be an issue anyway.</div><div><br></div><div>Maurizio</div><div><br></div></div>-- <br><div dir="ltr" class="gmail_signature">È difficile avere una convinzione precisa quando si parla delle ragioni del cuore. - "Sostiene Pereira", Antonio Tabucchi<br><a href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div></div></div></div>