与其说这是一个问题,不如说这是一个要求解释的问题。我在遵循Mark Summerfield的“使用Python和Qt的快速GUI编程”,我一定漏掉了一些东西,因为我无法理解以下机制,无法将我正在使用的、充满各种类型数据的真正“instance_item”和在QTreeWidget模型中表示它的“widget_item”链接起来,以方便使用。
设置:
widget_item.setData(0, Qt.UserRole, QVariant(long(id(instance_item))))
获取
widget_item.data(0, Qt.UserRole).toLongLong()[0]
像toLongLong()
这样的东西看起来根本不是“Pythonic”,为什么我们要调用Qt.UserRole和QVariant?“setData”和“data”函数是Qt框架的一部分,还是更通用的Python命令?
至少有两个更好的解决方案。为了增加脓毒性:
1)不需要太多的数据类型打包
2)PyQt4有一个备用API,QVariant不在这里,从QVariant到PyQt4的转换是透明的。要启用它,您需要在任何PyQt4导入语句之前添加以下行:
然后,您的代码如下所示:
请注意,还有一个选项
sip.setapi('QString', 2)
,其中QString被取消,您可以使用unicode代替。所有这些方法——SETDATA()、DATA()、TROUNGONE()都是QT的一部分,最初打算在C++中使用,在那里它们有更大的意义。我不确定作者到底想在这里做什么,但如果你发现自己在做一些非常不符合Python的事情,也许有更好的方法:
< Q>文档不能推荐这一点,因为C++中没有动态属性分配。当你不得不处理QVariant和其他类似的废话时(例如,当你通过QtSQL处理数据库时),有一些非常具体的例子,但是它们非常罕见。相关问题 更多 >
编程相关推荐