[PyQt] qt_handleMouseEvent - public API?

Phil Thompson phil at riverbankcomputing.com
Tue Mar 29 09:13:27 BST 2016


On 29 Mar 2016, at 8:01 am, Florian Bruhin <me at the-compiler.org> wrote:
> 
> Hey,
> 
> on Archlinux, PyQt did break after updating Qt to 5.6:
> 
>    $ python -c "from PyQt5 import QtTest"
>    Traceback (most recent call last):
>      File "<string>", line 1, in <module>
>    ImportError: /usr/lib/python3.5/site-packages/PyQt5/QtTest.so: undefined symbol:
>    _Z19qt_handleMouseEventP7QWindowRK7QPointFS3_6QFlagsIN2Qt11MouseButtonEES4_INS5_16KeyboardModifierEE
> 
> (bug report: [1])
> 
> When I demangle the symbol, I get:
> 
>    qt_handleMouseEvent(QWindow*, QPointF const&, QPointF const&, QFlags<Qt::MouseButton>, QFlags<Qt::KeyboardModifier>)
> 
> Looking at the Qt 5.6 header diff[2], it looks indeed like an overload
> was removed:
> 
>    -Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF & local, const QPointF & global, Qt::MouseButtons b, Qt::KeyboardModifiers mods = Qt::NoModifier);
>    +Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF &local, const QPointF &global, Qt::MouseButtons b, Qt::KeyboardModifiers mods, int timestamp);
> 
> I'm not sure what happened here: Does qt_handleMouseEvent count as
> public API (it has a Q_GUI_EXPORT and is in a public header), and this
> was an unintentional ABI break from Qt?
> 
> Or doesn't it count as public (it's not documented?) and PyQt is using
> private/half-public APIs?
> 
> If the latter is true, it means Archlinux should add PyQt to
> qt5-base's rebuild.list, i.e. it'll be rebuilt automatically as soon
> as Qt is updated.
> 
> Would that make sense?

PyQt knows nothing about qt_handleMouseEvent().

Phil


More information about the PyQt mailing list