<div dir="ltr"><div>Thank you Maurizio, I think you have understood my question.</div><div><br></div><div>So it seems that QMimeData works a bit like a "dict", associating MIME types to QByteArrays of data, and can therefore hold multiple types of data at the same time. That's what wasn't clear to me.</div><div><br></div><div>Thank you again!<br><br></div><div>Rodrigo<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 20, 2021 at 4:10 AM Maurizio Berti <<a href="mailto:maurizio.berti@gmail.com">maurizio.berti@gmail.com</a>> wrote:<br></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 dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><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 class="gmail_quote"><div>You seem to be talking about the possibility of *changing* the chosen format to a different one but still supporting a single format, but I am talking about mimeTypes() returning a list with *more* than one type, making the model have to support multiple formats at the same time. It's not clear to me how to do that in mimeData(), dropMimeData() and QMimeData. <br></div><div><br></div><div>In that scenario, it sounds like mimeData() would have to produce MIME data in multiple formats, and dropMimeData would have to support data in multiple formats. For one thing, it's not clear how to check the format of a QMimeData object. For another, it isn't clear how mimeData() can return a single QMimeData while supporting multiple formats.</div></div></div></blockquote><div></div></div><div><br></div><div>I'm not sure I'm understanding your question.</div><div>QMimeData is a container of data, stored in multiple fields identified by their "format", the assumption is that a format identifier always has the same data format specification (so, x-qabstractitemmodeldatalist should always have the structure described above, but nobody stops you to do anything else).<br><br>Let's suppose you have a list model with a series of urls and number of visits, and you want to allow both internal d&d, but also custom data format that includes the list as url/visits pairs, and standard OS support for those URLs:<br></div><div><br></div><div><div><font face="monospace">    def mimeData(self, indexes):</font></div><div><font face="monospace">        mimeData = super().mimeData(indexes)</font></div><div><font face="monospace">        urlList = []</font></div><div><font face="monospace">        ba = QByteArray()</font></div><div><font face="monospace">        stream = QDataStream(ba, QIODevice.WriteOnly)</font></div><div><span style="font-family:monospace">        for index in indexes:</span><br></div><div><span style="font-family:monospace">            url, visits = self.urls[index.row()]</span></div><div><font face="monospace">            urlList.append(QtCore.QUrl(url))</font></div><div><font face="monospace">            stream.writeQString(url)</font></div><div><font face="monospace">            stream.writeInt(visits)</font></div><div><font face="monospace">        mimeData.setUrls(urlList)</font></div><div></div><div><span style="font-family:monospace">        mimeData.setData('myApp/visitedUrlList', ba)</span></div><div><font face="monospace"></font></div><div><font face="monospace">        return mimeData</font></div></div><div><br></div><div>In this case, we have the current base implementation of mimeData (which is compliant with the Qt model d&d features), the url format used for browsers, *and* another custom "mime format"  that we could use in this model or any widget/model that could be interested in such a format.</div><div><font face="monospace"><br></font></div><div><font face="monospace">class SomeWidget(QWidget):</font></div><div><font face="monospace">    # ...</font></div><div><font face="monospace">    def dropEvent(self, event):</font></div><div><font face="monospace">        if event.mimeData().hasFormat('myApp/visitedUrlList'):</font></div><div><font face="monospace">            stream = QDataStream(event.mimeData().data('myApp/visitedUrlList'), QIODevice.ReadOnly)</font></div><div><font face="monospace">            while not stream.atEnd():</font></div><div><font face="monospace">                url = stream.readQString()</font></div><div><font face="monospace">                visits = stream.readInt()</font></div><div><font face="monospace">                # ...</font></div><div><br></div><div>I hope I've understood what you were asking.</div><div><br></div><div>Maurizio</div>-- <br><div dir="ltr">È 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></div></div></div></div></div></div></div></div></div></div>
</blockquote></div>