Another issue with QNetworkInformation

Phil Thompson phil at riverbankcomputing.com
Tue Sep 7 15:43:37 BST 2021


On 06/09/2021 16:07, Detlev Offenbach wrote:
> Hello,
> 
> I just upgraded to the latest PyQt6 snapshot. With this I get another
> error message trying to connect to the
> QNetworkInformation.reachabilityChanged signal. The message is
> 
> ------------------------------------------------------------------------
> 
> qt.core.qobject.connect: QObject::connect: Incompatible
> sender/receiver arguments
>         QNetworkInformation::reachabilityChanged(Reachability) -->
> EricNetworkIcon::__reachabilityChanged(QNetworkInformation::Reachability)
> 
> ------------------------------------------------------------------------
> The slot is defined with "@pyqtSlot(QNetworkInformation.Reachability).
> Defining the slot without @pyqtSlot works ok. What am I doing wrongly?

IMHO it's a Qt bug and one that is difficult to work around.

When a Qt signal has an argument that is an enum with the same scope as 
the signal then Qt sometimes declares the enum argument with a fully 
qualified name and sometimes just with the base name. In this case 
it's...

     void reachability(Reachability)

...but I think it should be...

    void reachability(QNetworkInformation::Reachability)

It doesn't matter to C++ but it does matter to moc because it uses the 
type as specified as a string. moc doesn't use the fully qualified name 
as it should. This means, even in C++, you have to know exactly how the 
signal argument was declared.

pyqtSlot() will always use fully qualified type names so that's what is 
used by connect() (incorrectly in this case). I guess a possibility 
would be to add a 'use_this_signature_with_connect' string argument to 
pyqtSlot() but I don't like it.

I think the best thing to do in such cases is just not to use 
pyqtSlot().

Phil


More information about the PyQt mailing list