2015-10-07 2 views
1

С PyQt4, я всегда был в состоянии инициализации QBrush и QColor с None в качестве аргумента (создает не цвет и т.д.):PyQt4 4.11.4 больше не принимает QBrush (None) или QColor (None)

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?

Также я не понимаю, что такое базовый вызов (C++) в Qt. Это на самом деле вызов QBrush() и QColor() или он пытается сменить Python None на c null?

Спасибо, я надеюсь, что не пропустил ничего очевидного в Интернете.

+0

«Значение None может быть указано везде, где NULL является приемлемым для базового кода C++» ([PyQt Doc] (http://pyqt.sourceforge.net/Docs/PyQt4/gotchas.html#none-and-null)). Но я понятия не имею, почему 'QBrush (None)' был действителен до и не сейчас. – Mel

ответ

1

PyQt-4.11.4 ChangeLog имеет эту запись:

2015-02-06 Фил Томпсон

  • PyQt4.msp: Исправлены все псевдо-ctors, которые принимают аргумент QVariant. [5c941d8fb16b] < 4,11-садоводам>

А вот соответствующие части дифф для глотка/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, а если нет, то возникает ошибка.

Смежные вопросы