Comment dois-je utiliser un QGraphicsScene avec les mises en page et des widgets
Je suis la création de certaines données graphiques de l'affichage du widget en Qt4 et j'ai été tenté d'utiliser les QGraphicsScene
pour, créer QGraphicsItem
s pour les éléments de données etc.
Cependant, je voulais ajouter un peu de la couche de contrôle (par exemple. les barres de défilement, de zoom+autres boutons - je veux le faire dans un style similaire comme par exemple. Google Maps, qui est, les données sont affichées partout dans le widget, et les boutons seront montrées au-dessus d'eux) pour le widget. J'ai donc pensé qu'il pourrait être possible de les ajouter à la scène (peut-être comme un enfant d'un QGraphicsGroupItem
qui sont affichés sur les données). Mais je tiens à aller de l' & redimensionner quand je redimensionner l'ensemble de widget, donc je devrais utiliser un QGraphicsLayout
de leur gestion. Mais à ce stade, j'ai découvert les choses sont assez compliquées.
Le problème est que lors de l'utilisation de QGraphicsLayout
, les contraintes suivantes tenir:
- Seulement un
QGraphicsWidget
peut être géré par une mise en page QGraphicsLayout
ne peut être utilisé pour gérer des enfants d'unQGraphicsWidget
Ce qui signifie que je dois créer mon contrôles QGraphicsWidget
s, ajouter un haut niveau de QGraphicsWidget
les données du widget, et de gérer la taille de ce haut niveau de widget moi-même.
Donc je veux vous demander:
- Ne serait pas une approche classique (ie. utiliser le bon vieux widgets pour tous les contrôles, et l'utilisation
QGraphicsScene
seulement pour afficher les données) être plus raisonnable? - Est-il un avantage dans l'utilisation de
QGraphicsScene
dans ce cas (performance ou la simplicité...)? - Comment dois-je utiliser
QGraphicsScene
à exploiter ses points forts?
OriginalL'auteur jpalecek | 2009-06-24
Vous devez vous connecter pour publier un commentaire.
Depuis Qt 4.4 vous pouvez incorporer classique des widgets dans un
QGraphicsScene
en utilisantQGraphicsProxyWidget
:OriginalL'auteur Luper Rouch
Si vous pensez que
QGraphicsScene
(ou tout autre widget que vous avez) est appropriée pour la plupart de votre écran, utilisez-le. Ce que nous avons fait dans le passé pour un peu les mêmes choses est de faire un widget personnalisé qui hérite (d'une manière ou d'une autre) à partir deQWidget
, et de mettre les widgets de contrôle dans une mise en page sur le dessus de ce widget. Cela signifie que l'ensemble du widget est de dessiner ce que vous voulez, et le contrôle des widgets sont sur le dessus de cela, redimensionnement comme l'ensemble de widget est redimensionné.Ou bien, une couple de fois, nous avons eu des mises en page qui a été un peu trop compliqué pour la mise en page des widgets pour gérer facilement. Plutôt que de créer une mise en page personnalisée, nous avons simplement placé entre eux, sans mise en page, et les a emmenés dans le code sur l'événement resize. Il fonctionne tout aussi bien.
jpalecek: cocher la case "horloges" widget demo @ qtsoftware.com/developer/pimp-my-widgets-developer-contest .. Rien de fantaisie sur un widget d'horloge mais la mise en œuvre de ce qui est fait avec QGraphics(Scène|Widget|View|Élément).
Je ne pense pas qu'un QGraphicsScene était un widget, c'est pourquoi j'ai dit d'hériter "d'une manière ou d'une autre". Mais vous avez un QGraphicsView (ou quelque chose de similaire), droit? Vous voulez probablement mettre vos widgets plus de cela, sauf si vous les voulez transformer votre scène. Je pense que dans ce cas la plaine vieux widget chemin est plus facile et la plus straight-forward.
OriginalL'auteur Caleb Huitt - cjhuitt