擅长:python、mysql、java
<p>至少有两个更好的解决方案。为了增加脓毒性:</p>
<p>1)不需要太多的数据类型打包</p>
<pre><code>widget_item.setData(0, Qt.UserRole, QVariant(instance_item))
widget_item.data(0, Qt.UserRole).toPyObject()
</code></pre>
<p>2)PyQt4有一个备用API,QVariant不在这里,从QVariant到PyQt4的转换是透明的。要启用它,您需要在任何PyQt4导入语句之前添加以下行:</p>
<pre><code>import sip
sip.setapi('QVariant', 2)
</code></pre>
<p>然后,您的代码如下所示:</p>
<pre><code>widget_item.setData(0, Qt.UserRole, instance_item)
widget_item.data(0, Qt.UserRole) # original python object
</code></pre>
<p>请注意,还有一个选项<code>sip.setapi('QString', 2)</code>,其中QString被取消,您可以使用unicode代替。</p>