Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt : 5.10.1 - Qt Creator : 4.6.0 - Qt Installer : 3.0.4 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - QBS : 1.11.0

Conseil dessin

3 May modifié dans Qt / Langage C++
Bonjour,

pour un projet personnel, je cherche sous Windows et macOS à dessiner sur un QWidget (voire une QMainWindow) transparent.

J'ai commencé à réaliser 2 approches comparables sous Qt (et une troisième en Firemonkey avec Delphi).
. une avec QGraphicView,
. une en dessinant sur le QWidget.

Dans tous les cas, j'obtiens bien une fenêtre transparente sur laquelle je peux dessiner. Mais un choix technique s'impose avec Qt.

J'ai besoin que les objets dessinés soient déplaçables, copiables, supprimables (et dans la majorité des cas transparents), partiellement ou complètement superposables. Les objets peuvent être des rectangles, des cercles, ou même un tracé à main levée. Je n'arrive pas à me décider. Il va bien falloir.

Sous Qt, le développement est paraît-il plus simple et plus adapté avec QGraphicView qui est en partie fait pour cela. Cependant, j'ai remarqué des points négatifs. Par exemple, un
item->setFlags(QGraphicsItem::ItemIsMovable);
rend bien l'item déplaçable mais la gestion automatisée de la souris me semble moins performante au niveau de la zone cliquable : seule une partie de l'item est "sensitive"; Pour un texte par exemple, la partie extrême gauche. Si vous cliquez sur sa fin à droite, il n'est pas sélectionné. On peut évidemment adjoindre un QGraphicsItem::ItemIsSelectable qui règle ce problème mais dans ce cas-là, la zone s'entoure d'un cadre en pointillé et nécessite de recliquer pour l'enlever... Pour l'effet visuel peut-être que les syles pourraient me permettre de résoudre ce problème mais que j'ai un mauvais souvenir à ce niveau dans une autre configuration. Mais de toute façon, c'est moins ergonomique (et également beaucoup moins lourd) que mon autre solution Qt qui d'ailleurs est une approche comparable à celle de Delphi..

Un conseil ? Merci.

Eventuellement, si l'approche était portable sur Androïd ou iOS ce serait un plus.

Cordialement. AD.

Réponses

  • Il faut passer par du QML. Pour être précis, il vaut mieux créer des éléments en C++ dans le moteur de rendu du QML.
    C'est l'avenir de Qt. C'est plus compliqué mais les performances sont meilleures.

    Si tu as pas envies de t'embêter et que ton projet n'a pas besoin d'avoir une durée de vie très longue. Je voterai pour QGraphicView. En 3 heures tu peux avoir fait 80% du travail à faire.
  • 19 May modifié
    Bonjour,

    désolé pour le retard... et grand merci pour votre réponse que j'ai lue le 7 mai, dont j'ai tenu compte, mais à laquelle je n'ai pas eu le temps de répondre, sans réelles certitudes.

    Donc, j'ai retenu votre 2ème conseil : QGraphicView. J'ai atteint le résultat escompté.

    Pour le QML, j'hésite encore dans la mesure où mon développement est orienté massivement Desktop.
    Pour les mobiles, j'utilise Firemonkey en général et... même souvent Windev Mobile.

    Alors je suppose que Qt et son QML sont préférables pour le développement mobile. Mais qu'en est-il pour le développement Desktop ? Puis-je actuellement et réellement dans les faits obtenir autant de souplesse qu'avec mes QTreeWidget ou mes QTableWidget... qui justement gèrent le HTML au niveau de leur affichage (images base 64 comprises) ?

    Cordialement. AD
Connectez-vous ou Inscrivez-vous pour répondre.