1

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 に変更しようとしていますか?

ありがとう、オンラインで明らかな何かを見逃していなかったことを願っています。

4

1 に答える 1

1

PyQt-4.11.4ChangeLogには次のエントリがあります。

2015-02-06 フィル・トンプソン

  • PyQt4.msp: QVariant 引数を取るすべての擬似 ctor を修正しました。[5c941d8fb16b] <4.11-メンテナンス>

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になり、そうでない場合はエラーが発生します。

于 2015-10-07T16:08:10.133 に答える