Yes, Qt very well ignores community advice for many years, even if they are extremely useful, are considered important and, as it turned out, will be the most voted, such as zip support .
I personally would not βfixβ the GridView , but rather implement something from scratch, which meets my specific requirements, in C ++, so itβs fast and efficient. And it will be very easy if your tiles are uniform squares, and it seems that you can get away from this, even if the actual images inside are not square. This will allow you to easily determine your positions programmatically, as well as determine the upper left corner tile, the number of tiles per line and the step for subsequent lines. Then, when the visibility rectangle moves you, you iterate over the container and signal to create QML elements for those who enter visibility. Easy peasy.
You do not need anything fantastic, just inherit a QObject , register the type in QML, then go and fill it with an internal βmodelβ. You definitely do not want to have all the objects in memory, even if the scene graph is smart enough not to display them, it will still process them, I suspect that your drop in FPS is not a GPU product, but a CPU bottleneck,
The actual mesh object can generate creation and destruction signals with their data Q_SIGNAL void create(x, y, imgPath); , so you bind custom handlers on the QML side, which will give you flexibility and ease of use, for example, it is easy to specify the "delegate" object, it will be more elegant than doing the actual creation / destruction in C ++. You can use QML-side bindings for several elements that are visible for tracking when they exit the screen to self-destruct, which minimizes complexity since you do not have to track all the "live" objects.
Component { id: objComponent Image { property bool isVisible: { is in grid.visibleRect ??? } onIsVisibleChanged: if (!isVisible) destroy() } } MyGrid { id: grid contentX: flickable.contentX contentY: flickable.contentY onCreate: objComponent.createObject(flickable.contentItem, {"x" : x, "y" : y, "source" : imgPath}) } Flickable { id: flickable contentWidth: grid.contentWidth contentHeight: grid.contentHeight }
Usually, when a user has a question that is important enough to offer generosity, I would create working code, but unfortunately I'm too busy right now. The concept is quite simple, although it should not be too complicated to implement.