擅长:python、mysql、java
<p><code>QVariant</code>涉及:</p>
<pre><code> QVariant dynamicCall(const char *, QList<QVariant> & /GetWrapper/);
%MethodCode
Py_BEGIN_ALLOW_THREADS
sipRes = new QVariant(sipCpp->dynamicCall(a0, *a1));
Py_END_ALLOW_THREADS
// Update the input list with the (possibly) new values.
for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(a1Wrapper); ++i)
{
QVariant *v = new QVariant(a1->at(i));
PyObject *v_obj = sipConvertFromNewType(v, sipType_QVariant, NULL);
</code></pre>
<p>简而言之,<code>QVariant</code>是通过引用传递值的包装器</p>
<p>这意味着通过传递<code>c_int</code>,您已经将该值包装了两次。尝试将实数<code>QVariant</code>而不是<code>c_int</code>作为第二个参数传递。如果没有这一点,PyQt中的自动类型强制将采用<code>c_int</code>,将其值包装在<code>QVariant</code>中,调用<code>dynamicCall</code>。在调用过程中,新的<code>QVariant</code>会被更新,但与原始的<code>c_int</code>没有连接,因此您的实例不会更改</p>
<p>这应该起作用:</p>
<pre><code>num = QVariant(0)
myobj.dynamicCall('GetNumHWUnits(int, int&)', [6, num])
print repr(num.value())
</code></pre>