- Qt 6.11
- Qt Qml
- Qt Qml Tooling
- qmllint
- QML Lint Warning and Errors
- Missing property
- Qt 6.11.1 Reference Documentation

Missing enum entry ◦ Missing type

# Missing property

This warning category is spelled `[missing-property]` by qmllint.

## Can't assign to non-existent default property

### What happened?

You assigned an object to a non-existing default property.

### Why is this bad?

The QML engine can't assign this object at runtime.

### Example

     import QtQuick

     Item {
         component MyType: QtObject { property Item myItem; }

         MyType {
             Item {}
         }
     }

To fix this warning, specify the property you want to bind to or, if you are the author of the type, mark a property as default:

     import QtQuick

     Item {
         component MyType: QtObject { property Item myItem; }

         MyType {
             myItem: Item {}
         }

         component AlternativeMyType: QtObject { default property Item myItem; }

         AlternativeMyType {
             Item {} // bound to myItem via default property
         }
     }

## Property does not exist

### What happened?

You assigned an expression to a non-existing property.

### Why is this bad?

The QML engine can't assign this expression at runtime.

### Example

     import QtQuick

     Item {
         property int myInt
         myItn: 42
     }

To fix this warning, remove the binding or correct a possible typo:

     import QtQuick

     Item {
         property int myInt
         myInt: 42
     }

## Member not found on type

### What happened?

You accessed a member in a field member expression that can't be found by QML tooling. A field member expression is an expression of the form `someId.someProperty`.

The member might not exist at all, for example when you made a typo. Or it might exist at runtime (because it exists on a specific sub-type that is always present), but not on the statically declared type.

### Why is this bad?

The QML tooling can't find this member, meaning that features like go-to-definition and autocomplete won't work. At runtime, there might be an error or you might get an incorrect result if the member really does not exist. There won't be an error if the member actually always exist at runtime, however in that case there can still be a performance cost due to missed optimizations.

### Example

#### Property does not actually exist

     import QtQuick

     Item {
         id: self
         property int myInt
         property int myInt2: 1 + self.myItn
     }

To fix this warning, remove the binding or correct a possible typo:

     import QtQuick

     Item {
         id: self
         property int myInt
         property int myInt2: 1 + self.myInt
     }

#### Property exists, but type is not precise enough

     import QtQuick
     import QtQuick.Controls.Basic

     Item {
       component Message : Item {
         required property string sender
         required property string text
       }
       ListView {
         id: messageView
         delegate: Message {}
       }

       Button {
         text: "Reply to %1".arg(messageView.currentItem.sender) // not ok
       }
     }

To fix this warning, cast the object you read from to the more specific type:

     import QtQuick
     import QtQuick.Controls.Basic

     Item {
       component Message : Item {
         required property string sender
         required property string text
       }
       ListView {
         id: messageView
         delegate: Message {}
       }

       Button {
         text: "Reply to %1".arg((messageView.currentItem as Message).sender) // now ok
       }
     }

In the example, the declared type of `messageView`'s currentItem property is Item, which has no `sender` property: `sender` is defined only in `Message`. Here, we know however that `currentItem` always contains a `Message`, so we can cast `currentItem` to `Message` using a type assertion.