PyQt4 4.11.4 不再接受 QBrush(None) 或 QColor(None)
PyQt4 4.11.4 no longer accepts QBrush(None) or QColor(None)
使用 PyQt4,我总是能够使用 None 作为参数初始化 QBrush 和 QColor(不创建颜色等):
QBrush(None)
QColor(None)
但是当我从4.11.3升级到4.11.4(小升级)后,我发现这些不再被接受:
>>> QColor(None)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: arguments did not match any overloaded call:
QColor(Qt.GlobalColor): argument 1 has unexpected type 'NoneType'
QColor(int): too many arguments
QColor(QVariant): argument 1 has unexpected type 'NoneType'
QColor(): argument 1 has unexpected type 'NoneType'
QColor(int, int, int, int alpha=255): argument 1 has unexpected type 'NoneType'
我试图搜索 4.11.3 和 4.11.4 之间的变化,但找不到任何相关信息来解释这一点。我开始怀疑我是否在寻找正确的东西。
这是Qt的变化引起的吗?还是 PyQt4?或 python-SIP?
此外,我实际上并不了解 Qt 中的底层 (C++) 调用是什么。它实际上是在调用 QBrush() 和 QColor() 还是试图将 Python None 更改为 c null?
谢谢,我希望我没有遗漏一些明显的在线信息。
PyQt-4.11.4 ChangeLog
有这个条目:
2015-02-06 Phil Thompson
- PyQt4.msp: Fixed all pseudo-ctors that take a QVariant argument.
[5c941d8fb16b] <4.11-maint>
这里是 sip/QtGui/qcolor.sip:
的差异的相关部分
--- PyQt-x11-gpl-4.11.3/sip/QtGui/qcolor.sip 2014-11-09
+++ PyQt-x11-gpl-4.11.4/sip/QtGui/qcolor.sip 2015-06-11
@@ -75,13 +70,17 @@
QColor(Qt::GlobalColor color /Constrained/);
QColor(QRgb rgb);
- QColor(const QVariant &variant) /NoDerived/;
+ QColor(const QVariant &variant /GetWrapper/) /NoDerived/;
%MethodCode
#if QT_VERSION >= 0x050000
- sipCpp = new QColor(a0->value<QColor>());
+ if (a0->canConvert<QColor>())
+ sipCpp = new QColor(a0->value<QColor>());
#else
- sipCpp = new QColor(qVariantValue<QColor>(*a0));
+ if (qVariantCanConvert<QColor>(*a0))
+ sipCpp = new QColor(qVariantValue<QColor>(*a0));
#endif
+ else
+ sipError = sipBadCallableArg(0, a0Wrapper);
%End
QString name() const;
所以看起来复制构造函数现在检查 QVariant
是否可以将参数转换为 QColor/QBrush
,如果不能,则会引发错误。
使用 PyQt4,我总是能够使用 None 作为参数初始化 QBrush 和 QColor(不创建颜色等):
QBrush(None)
QColor(None)
但是当我从4.11.3升级到4.11.4(小升级)后,我发现这些不再被接受:
>>> QColor(None)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: arguments did not match any overloaded call:
QColor(Qt.GlobalColor): argument 1 has unexpected type 'NoneType'
QColor(int): too many arguments
QColor(QVariant): argument 1 has unexpected type 'NoneType'
QColor(): argument 1 has unexpected type 'NoneType'
QColor(int, int, int, int alpha=255): argument 1 has unexpected type 'NoneType'
我试图搜索 4.11.3 和 4.11.4 之间的变化,但找不到任何相关信息来解释这一点。我开始怀疑我是否在寻找正确的东西。
这是Qt的变化引起的吗?还是 PyQt4?或 python-SIP?
此外,我实际上并不了解 Qt 中的底层 (C++) 调用是什么。它实际上是在调用 QBrush() 和 QColor() 还是试图将 Python None 更改为 c null?
谢谢,我希望我没有遗漏一些明显的在线信息。
PyQt-4.11.4 ChangeLog
有这个条目:
2015-02-06 Phil Thompson
- PyQt4.msp: Fixed all pseudo-ctors that take a QVariant argument. [5c941d8fb16b] <4.11-maint>
这里是 sip/QtGui/qcolor.sip:
的差异的相关部分--- PyQt-x11-gpl-4.11.3/sip/QtGui/qcolor.sip 2014-11-09
+++ PyQt-x11-gpl-4.11.4/sip/QtGui/qcolor.sip 2015-06-11
@@ -75,13 +70,17 @@
QColor(Qt::GlobalColor color /Constrained/);
QColor(QRgb rgb);
- QColor(const QVariant &variant) /NoDerived/;
+ QColor(const QVariant &variant /GetWrapper/) /NoDerived/;
%MethodCode
#if QT_VERSION >= 0x050000
- sipCpp = new QColor(a0->value<QColor>());
+ if (a0->canConvert<QColor>())
+ sipCpp = new QColor(a0->value<QColor>());
#else
- sipCpp = new QColor(qVariantValue<QColor>(*a0));
+ if (qVariantCanConvert<QColor>(*a0))
+ sipCpp = new QColor(qVariantValue<QColor>(*a0));
#endif
+ else
+ sipError = sipBadCallableArg(0, a0Wrapper);
%End
QString name() const;
所以看起来复制构造函数现在检查 QVariant
是否可以将参数转换为 QColor/QBrush
,如果不能,则会引发错误。