Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Classes principales  ·  Annotées  ·  Classes groupées  ·  Fonctions  · 

OpenGL Overlay X11 Example

Warning: From version 5.0 onwards, the Qt OpenGL Extension includes direct support for use of OpenGL overlays. For many uses of overlays, this makes the technique described below redundant. See the overlay example program. The following is a discussion on how to use non-QGL widgets in overlay planes.

Overlayrubber: An example program showing how to use Qt and Qt OpenGL Extension with X11 overlay visuals.

See $QTDIR/examples/opengl/overlay_x11 for the source code.

Background information for this example can be found in the information on overlays.

The example program has three main parts:

  1. GearWidget - a normal, simple QGLWidget. This renders the usual gears. It has been modified to print a debug message every time it redraws (renders) itself. Thus, you can easily confirm that drawing in the overlay plane does not cause redrawings in the main plane where the QGLWidget resides.

  2. RubberbandWidget - Very simple standard (non-GL) Qt widget that implements rubberband drawing. Designed for use in an overlay plane. It takes the plane's transparent color as a constructor argument and uses that for its background color. Thus, the widget itself will be invisible, only the rubberbands it draws will be visible.

  3. main.cpp Creates a GearWidget and a Rubberbandwidget and puts the latter on top of the former. Contains a routine that checks that the default visual is in an overlay plane, and returns the transparent color of that plane.

Running the Example

Start the overlayrubber executable. Click and drag with the left mouse button to see rubberband drawing. Observe that the QGLWidget does not redraw itself (no redraw debug messages are output), and yet the image is not destroyed. Marvel at the coolness of X11 overlays!

Using this technique in a real application

For clarity, this example program has been kept very simple. Here are some hints for real application usage:

  • All normal widgets are in the overlay plane. This means that you can put all kinds of Qt widgets (your own or standard Qt widgets) on top of the OpenGL image (widget), e.g. pushbuttons etc., and they can be moved, resized, or removed without destroying the OpenGL image.

  • Using with geometry management. The QLayout classes don't permit putting one widget (the overlay) on top of another (the OpenGL widget); that would defy the whole purpose of the automatic layout. The solution is to add just one of them to the QLayout object. Have it keep a pointer to the other (i.e. the QGLWidget knows about its overlay widget or vice versa). Implement the resizeEvent() method of the widget you put in the layout, and make it call setGeometry() on the other widget with its own geometry as parameters, thus keeping the two widgets' geometries synchronized.

  • Using together with QPalette and QColorGroup. Instead of the simplistic setBackgroundColor( transparentColor ), you can use Qt's QPalette system to make your overlay widgets use transparent color for what you want. This way, the normal Qt widgets can be used as overlays for fancy effects. Just create a palette for them with the transparent color for the relevant color roles, e.g. Background and Base, in the Normal and/or Active modes. This way, you can create see-through QPushButtons etc.

See also OpenGL Examples.

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 24
  2. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 46
  3. Une nouvelle ère d'IHM 3D pour les automobiles, un concept proposé par Digia et implémenté avec Qt 3
  4. Qt Creator 2.5 est sorti en beta, l'EDI supporte maintenant plus de fonctionnalités de C++11 2
  5. PySide devient un add-on Qt et rejoint le Qt Project et le modèle d'open gouvernance 1
  6. Vingt sociétés montrent leurs décodeurs basés sur Qt au IPTV World Forum, en en exploitant diverses facettes (déclaratif, Web, widgets) 0
  7. Thread travailleur avec Qt en utilisant les signaux et les slots, un article de Christophe Dumez traduit par Thibaut Cuvelier 1
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 95
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 50
  4. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 24
  5. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 46
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. Qt Commercial : Digia organise un webinar gratuit le 27 mars sur la conception d'interfaces utilisateur et d'applications avec le framework 0
Page suivante

Le Qt Developer Network au hasard

Logo

Utiliser QML et QtWebKit avec PySide

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 3.3
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web