Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Qt 5.12 : le nouveau composant TableView pour Qt Quick a une très bonne performance
Grâce à une réutilisation des délégués

Le , par dourouc05

69PARTAGES

11  0 
Qt 5.12 a une nouveauté majeure du côté Qt Quick : un composant TableView pour afficher des tableaux. Les mauvaises langues diront qu’il était temps, les autres se souviendront du composant TableView de Qt Quick Controls 1… et de son horrible performance. Même dans un tableau relativement petit (trente colonnes), il est impossible de défiler à grande vitesse dans les lignes :


L’ancienne implémentation n’a jamais été prévue pour de bonnes performance. Elle était implémentée en QML par-dessus ListView, un composant prévu pour d’autres usages : en fait, simplement afficher une liste. Cette première itération de TableView mettait une série de cellules par élément de la liste (comme délégué), ce qui effectivement ressemble à un tableau. Sauf que… TableView, premier du nom, alloue un nouveau délégué chaque fois qu’un nouvel item entre dans la vue et désalloue ceux qui en sortent, parce que ListView fonctionne ainsi. En défilant rapidement, on doit donc allouer un très grand nombre d’objets assez complexes qui ne sont presque jamais affichés.

La nouvelle implémentation part de zéro. Elle est effectuée en C++ par-dessus le composant Flickable, qui fournit une interface pour faire défiler un composant (de haut en bas, de gauche à droite et dans les autres sens). Elle n’alloue que les lignes et les colonnes visibles à l’écran et réutilise les délégués autant que possible, en évitant de remettre les délégués à zéro pour limiter le nombre de signaux émis. Toute l’API est prévue pour une bonne performance plutôt qu’un usage déclaratif : par exemple, pour donner la taille d’une colonne, cela ne peut plus se faire au niveau d’une colonne (propriété width de TableViewColumn), mais bien à l’aide d’une fonction définie pour le tableau entier. Cette manière de faire est bien plus pratique pour des centaines ou des milliers de colonnes — la cible du nouveau composant. Le résultat est saisissant, en comparaison.


Source : TableView performance.

Une erreur dans cette actualité ? Signalez-le nous !