Qt5 – TypeError: Property of object is not a function


Beim Kompilieren eines Qt5-Projektes kommt es zu einer Fehlermeldung über einen Aufruf einer Funktion die keine ist. Die Fehlermeldung sieht dann so oder ähnlich aus:

qrc:/main.qml:136: TypeError: Property 'loginButtonClicked' of object MainQMLBackend(0x555555b2afe0) is not a function

Leider ist die Aussage etwas ungenau und irreführend formuliert. Eine Fehlersuche hat ergeben, die aufgerufene Funktion existiert und ist auch richtig implementiert.

Der Aufruf in der main.qml-Datei in der Zeile 136 lautet:

backend.loginButtonClicked();

Die Deklaration und Implementierung in der C++ QML-Backend-Klasse:

private slots:
    void loginButtonClicked();
    
void MainQMLBackend::loginButtonClicked(){
    ...
}

Auf den ersten Blick scheint alles in Ordnung zu sein. Warum sagt der Compiler es handle sich um keine Funktion?

Beim zweiten Hinsehen fällt auf, die Slot-Funktion ist als private deklariert. Die Änderung in public löst das Problem. Der Fehler wurde also durch die fehlenden Zugriffsrechte ausgelöst. Eine Erwähnung in der Fehlermeldung wie “function not found” oder besser “call on private member” wäre hier hilfreicher um den Fehler schneller zu orten. Die Aussage “property is not a function” lenkt die Fehlersuche in ein ganz andere Richtung.

Fazit: Bei dieser Fehlermeldung immer zuerst die Zugriffsrechte überprüfen.



Anzeige

 

War dieser Beitrag für dich informativ? Hat er dir gefallen oder geholfen?

Dann unterstütze die Weiterentwicklung dieser Webseite mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.




Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert