Richtige Funktion verwenden

Diese Warnkategorie wird von qmllint [use-proper-function] geschrieben.

Eigenschaft ist eine abweichende Eigenschaft: Sie kann eine Methode sein oder auch nicht.

Was ist passiert?

Sie haben eine Eigenschaft vom Typ var verwendet, als wäre sie eine aufrufbare Funktion.

Warum ist das schlecht?

Dies beeinträchtigt die Lesbarkeit des Codes, die QML-Engine gibt eine Fehlermeldung aus, wenn die Eigenschaft keine aufrufbare Funktion enthält, und das QML-Tooling kann keine spezifischen Methodenoptimierungen anwenden.

Beispiel

import QtQuick

Item {
    property var fun: () => console.log("Hello")
    Component.onCompleted: { fun(); }
}

Um diese Warnung zu beheben, deklarieren Sie fun als eine Funktion, um sie aufrufen zu können:

import QtQuick

Item {
    function fun() {
        console.log("Hello")
    }

    Component.onCompleted: { fun(); }
}

Eigenschaft ist eine QJSValue-Eigenschaft: Sie kann eine Methode sein oder auch nicht.

Was ist passiert?

Sie haben eine Eigenschaft vom Typ QJSValue so verwendet, als wäre sie eine aufrufbare Funktion.

Hinweis: Eigenschaften vom Typ QJSValue können nur in C++ definiert werden.

Warum ist das schlecht?

Die Eigenschaft sollte höchstwahrscheinlich nicht aufgerufen werden und führt dazu, dass die QML-Engine zur Laufzeit einen Fehler ausgibt.

Beispiel

import QtQuick

Rectangle {
    // Rectangle has a property gradient of the type QJSValue
    Component.onCompleted: { console.log(gradient()); }
}

Um diese Warnung zu beheben, entfernen Sie den Aufruf von gradient:

import QtQuick

Item {
    // Rectangle has a property gradient of the type QJSValue
    Component.onCompleted: { console.log(gradient); }
}

Alternativ können Sie die Eigenschaftsdefinition durch eine reguläre Q_INVOKABLE Methode oder einen Slot ersetzen, wenn Sie der Autor der Eigenschaft sind. Dies ist nur möglich, wenn die Funktion nie in QML geändert werden soll. Wenn Sie tatsächlich einen Rückruf speichern müssen, haben Sie Pech gehabt.

Signal wird von einer Eigenschaft überschattet

Was ist passiert?

Sie haben ein Signal aufgerufen, das von einer Eigenschaft überschattet wird, oder Sie haben ein Signal mit einer Eigenschaft überschattet.

Warum ist das schlecht?

Der Aufrufer hat höchstwahrscheinlich erwartet, dass er ein Signal aufruft, und nicht die schattenbildende Eigenschaft. Dies kann dazu führen, dass die QML-Engine zur Laufzeit einen Fehler ausgibt.

Beispiel

import QtQuick

Item {
    component Base: Item {
        signal helloSignal
    }

    Base {
        property int helloSignal // shadows helloSignal inherited from Base
        Component.onCompleted: { helloSignal(); }
    }
}

Um diese Warnung zu beheben, benennen Sie die schattengebende Eigenschaft um:

import QtQuick

Item {
    component Base: Item {
        signal helloSignal
    }

    Base {
        property int helloSignal2 // does not shadow anymore
        Component.onCompleted: { helloSignal(); }
    }
}

Methode wird von einer Eigenschaft beschattet

Siehe {Signal is shadowed by a property}.

Slot wird von einer Eigenschaft beschattet

Siehe {Signal is shadowed by a property}.

Eigenschaft ist keine Methode

Was ist passiert?

Sie haben eine Eigenschaft eines anderen Typs als var oder QJSValue verwendet, als wäre sie eine aufrufbare Funktion.

Warum ist das schlecht?

Die Eigenschaft kann nicht aufgerufen werden und führt zu einer Fehlermeldung der QML-Engine zur Laufzeit.

Beispiel

import QtQuick

Item {
    property int hello
    Component.onCompleted: { console.log(hello()); }
}

Um diese Warnung zu beheben, entfernen Sie den Aufruf oder machen Sie hello zu einer Funktion:

import QtQuick

Item {
    property int hello
    Component.onCompleted: { console.log(hello); }

    // alternative:
    function helloAlternative() { ... }
    Component.onCompleted: { console.log(helloAlternative()); }
}

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.