+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 140
    Points : 119 128
    Points
    119 128

    Par défaut Le module QtQuick.Shapes fait son apparition avec Qt 5.10

    Dessiner des formes arbitraires n’a jamais été chose aisée avec Qt Quick. De base, on ne peut dessiner que des rectangles (avec des bords carrés ou arrondis, au choix). Impossible de dessiner une autre forme, à moins de faire appel à du code JavaScript et l’API Canvas ou de coder soi-même la forme en C++. C’est d’ailleurs l’une des limitations historiques de Qt Quick par rapport à la vue graphique. Avec Qt 5.10, la situation évolue : le module QtQuick.Shapes apporte justement ces éléments manquants… avec une performance inégalée (sauf pour des formes codées en C++).

    L’implémentation de ce module a été délicatement pensée. Ainsi, il n’y a aucune pixélisation du rendu : les formes dessinées le sont de manière vectorielle (sans passer par QImage ou un tampon OpenGL), ce qui laisse la possibilité de les afficher avec n’importe quelle résolution, voire de les animer. En effet, l’API est entièrement déclarative et tous les attributs des formes peuvent être animés avec les mécanismes habituels de Qt Quick — sans relancer des calculs inutiles.
    Le rendu est implémenté de différentes manières, avec cependant la même API. L’implémentation de base réutilise le moteur de triangulation de QPainter en OpenGL, mais, sur les GPU NVIDIA, il est possible d’utiliser l’extension GL_NV_path_rendering pour accélérer le rendu. Pour le moteur de rendu logiciel de Qt Quick, tout se passe avec QPainter. Dans le futur, il sera ainsi possible d’ajouter un rendu par OpenVG ou Direct3D 12.

    Ces formes sont dessinées par un composant Shape, mais la description est effectuée par un ou plusieurs ShapePath. Par exemple, pour dessiner un triangle avec une animation sur la largeur du trait et la couleur de remplissage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Shape {
         id: tri
        anchors.fill: parent
     
        ShapePath {
            id: tri_sp
            strokeColor: "red"
            strokeWidth: 4
            SequentialAnimation on strokeWidth {
                running: tri.visible
                NumberAnimation { from: 1; to: 20; duration: 2000 }
                NumberAnimation { from: 20; to: 1; duration: 2000 }
            }
            ColorAnimation on fillColor {
                from: "blue"; to: "cyan"; duration: 2000; running: tri.visible
            }
     
            startX: 10; startY: 10
            PathLine { x: tri.width - 10; y: tri.height - 10 }
            PathLine { x: 10; y: tri.height - 10 }
            PathLine { x: 10; y: 10 }
        }
    }

    Cependant, le module en l’état n’est pas forcément à même de battre la vue graphique en termes de composants à afficher, chaque forme ayant un surcoût en performance à l’affichage — surtout sans accélération graphique, où un trop grand nombre de formes ou d’animations posera rapidement problème. Il est déjà possible de demander le calcul asynchrone de la géométrie, ce qui permet d’afficher rapidement l’interface, les formes Shape venant plus tard, sans retarder le reste de l’interface.

    Source : Let There Be Shapes!.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions) ? Contactez-moi par MP.

    Nouveau ! Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    mars 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 112
    Points : 250
    Points
    250

    Par défaut

    J'ai envie de dire c'est pas trop tôt :/

    Ça fait 5 ans que les seules solutions disponibles pour ça étaient d'utiliser le rasterizer software ou du Canvas JS tout pourri. Ça faisait un peu tâche.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/06/2014, 16h40
  2. Réponses: 10
    Dernier message: 15/10/2013, 18h50
  3. Réponses: 0
    Dernier message: 30/05/2011, 16h48
  4. Réponses: 0
    Dernier message: 24/11/2010, 10h45
  5. Réponses: 1
    Dernier message: 30/07/2010, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo