2011-08-23 4 views
0

Est-il possible de couper un QGLWidget? Je veux dire que je voudrais le couper afin que j'accède au gui ci-dessous. Cela semble étrange, mais ce serait beaucoup de travail pour moi de diviser mon QGLWidget en deux. J'espère que tu comprends ce que je veux dire. MerciCouper QGLWidget?

+0

Vous ne savez pas ce que vous essayez de faire ici? Quel effet essayez-vous d'atteindre? Peut-être que ce que vous voulez est exprimé différemment en Qt.Avez-vous des exemples de la façon dont votre application devrait ressembler? – blueskin

Répondre

5

Je ne comprends pas ce que vous entendez par "couper" et GUI ci-dessous. En Qt avec des mécanismes de mise en page correctement utilisés, un widget consomme la zone qu'il couvre et il n'y a pas de widgets en dessous.

Voulez-vous afficher plusieurs vues dans un seul QGLWidget? Ceci est facilement réalisé en utilisant correctement glViewport + glScissor.


EDIT en raison de commentaires

Il existe deux types de fenêtres:

  • niveau (ceux que vous pouvez déplacer librement sur l'écran)
  • fenêtres enfants (sous-fenêtres comme des widgets ou des volets dans une fenêtre de niveau supérieur)

fenêtres enfant nouveau sont disponibles en deux caractéristiques:

  • enfant logique
  • véritable enfant

Une fenêtre enfant logique consiste simplement à sa position, la dimension et de la couche et sont gérés par la boîte à outils. De la vue du système d'exploitation, il n'y a qu'une seule fenêtre de niveau supérieur. Le toolkit est celui qui gère son état interne pour donner l'impression de fenêtres indépendantes dans la fenêtre de premier niveau.

Une véritable fenêtre enfant est gérée par le système d'exploitation/graphique. De telles fenêtres enfant réelles peuvent partager leur contexte graphique avec leur parent et leur frère. Cependant, OpenGL ne fonctionne bien que si la fenêtre dans laquelle un contexte OpenGL est créé a son propre contexte graphique. Ainsi, toute fenêtre enfant OpenGL aura inévitablement son propre contexte graphique et son propre objet fenêtre de système graphique. La plupart des systèmes graphiques ne supportent pas correctement l'application de formes sur les fenêtres enfants (seulement les fenêtres de niveau supérieur, et cela est également en conflit avec OpenGL). Ainsi, tout cela est pratiquement impossible, ni souhaitable d'essayer de "superposer" une fenêtre OpenGL au-dessus d'un frère ou d'une soeur. Cela peut fonctionner dans certaines circonstances, mais la plupart du temps ce n'est pas le cas.

Voilà les mauvaises nouvelles.

Les bonnes nouvelles sont que vous avez simplement regardé dans une direction fausse. Je dirige votre vue vers QGraphicsView. QGraphicsView prend en charge OpenGL en tant que backend, vous pouvez également écrire votre propre code de rendu OpenGL à exécuter dans un QGraphicsView. Mais QGraphicsView peut également être utilisé pour le rendu de widgets, en utilisant également OpenGL. Donc tout ce que vous avez à faire est de mettre à la fois votre code de rendu OpenGL et votre widget dans une scène commune QGraphicsView et sont terminés. Et voici un tutoriel http://www.crossplatform.ru/node/612 le résultat du tutoriel ressemble à ceci: enter image description here

+0

Il est en quelque sorte difficile à expliquer.Mais je veux poser un QGLWidget sur un QWidget.On mac il n'est pas possible de le faire dans l'autre sens.Maintenant j'ai deux vieworts dans mon QGLWidget.La partie où le Gui devrait être affiché, devrait être coupé. Est-ce possible, parce que je ne sais pas comment mettre mes deux viewports dans deux widgets. Mes viewports interagissent et en tant que débutant dans Qt je ne saurais pas comment y parvenir. Donc ce serait malin si je pouvais couper la partie. J'ai décrit mon problème plus tôt ici: [link] (http://stackoverflow.com/questions/7092106/defining-buttons-in-opengl-window) Merci – buddy

+0

@buddy: Le genre de chose que vous essayez de faire, ceux qui tenté soit il a fini dans un asile ou est allé postal ou les deux. Voir mon edit pour une explication. – datenwolf

+0

Hm, ok. Je pense que vous vouliez dire mental non postal? Ou c'est une nouvelle expression. Merci – buddy