Je fais beaucoup de téléchargements de textures (60 images VGA par seconde) et cela bloque mon thread d'interface utilisateur. À partir de la page de manuel Qt 5.1 QGLWidget (c'est moi qui souligne) :
Téléchargement de textures dans un fil de discussion. Le téléchargement de textures dans un thread peut être très utile pour les applications gérant de grandes quantités d'images à afficher, comme par exemple une application de galerie photo. Ceci est supporté dans Qt par l'API bindTexture() existante. Une façon simple de procéder est de créer deux QGLWidgets de partage. L'un est mis à jour dans le thread principal de l'interface graphique, tandis que l'autre est mis à jour dans le thread de téléchargement de la texture. Le widget dans le fil de téléchargement n'est jamais affiché, il n'est utilisé que pour le partage des textures avec le thread principal. Pour chaque texture liée via bindTexture(), le thread principal est notifié afin qu'il puisse commencer à utiliser la texture.
Comment une classe basée sur QWidget, telle que QGLWidget, peut-elle être déplacée vers un thread ? Si vous tentez de le faire, le résultat est le suivant :
QObject::moveToThread: Widgets cannot be moved to a new thread
Je ne comprends pas ce que la documentation me suggère d'implémenter pour déplacer, par exemple, les éléments suivants bindTexture()
de l'exécution de l'opération en dehors du fil d'exécution de l'interface utilisateur.
Ceci est également mentionné ici : Qt4/Opengl bindTexture dans un fil séparé
Aucun code n'y est affiché.