📄 opengl-overlay-x11-example.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/examples/opengl/overlay_x11/overlay_x11.doc:1 --><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenGL Overlay X11 Example</title><style type="text/css"><!--h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }a:link { color: #004faf; text-decoration: none }a:visited { color: #672967; text-decoration: none }body { background: #ffffff; color: black; }--></style></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr bgcolor="#E5E5E5"><td valign=center> <a href="index.html"><font color="#004faf">Home</font></a> | <a href="classes.html"><font color="#004faf">All Classes</font></a> | <a href="mainclasses.html"><font color="#004faf">Main Classes</font></a> | <a href="annotated.html"><font color="#004faf">Annotated</font></a> | <a href="groups.html"><font color="#004faf">Grouped Classes</font></a> | <a href="functions.html"><font color="#004faf">Functions</font></a></td><td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>OpenGL Overlay X11 Example</h1> <p> <b>Warning:</b> From version 5.0 onwards, the Qt OpenGL Extension includesdirect support for use of OpenGL overlays. For many uses of overlays,this makes the technique described below redundant. See the <a href="opengl-overlay-example.html">overlay</a> example program. Thefollowing is a discussion on how to use non-QGL widgets in overlayplanes.<p> Overlayrubber: An example program showing how to use Qt and Qt OpenGLExtension with X11 overlay visuals.<p> See <tt>$QTDIR/examples/opengl/overlay_x11</tt> for the source code.<p> Background information for this example can be found in theinformation on <a href="opengl-x11-overlays.html">overlays</a>. <p> The example program has three main parts:<p> <ol type=1><li> <em>GearWidget</em> - a normal, simple <a href="qglwidget.html">QGLWidget</a>. This renders the usualgears. It has been modified to print a debug message every time itredraws (renders) itself. Thus, you can easily confirm that drawing inthe overlay plane does not cause redrawings in the main plane wherethe QGLWidget resides.<p> <li> <em>RubberbandWidget</em> - Very simple standard (non-GL) Qt widget thatimplements rubberband drawing. Designed for use in an overlay plane.It takes the plane's transparent color as a constructor argument anduses that for its background color. Thus, the widget itself will beinvisible, only the rubberbands it draws will be visible.<p> <li> <em>main.cpp</em> Creates a GearWidget and a Rubberbandwidget and puts thelatter on top of the former. Contains a routine that checks that thedefault visual is in an overlay plane, and returns the transparentcolor of that plane.</ol><p> <h2> Running the Example</h2><a name="1"></a><p> Start the <tt>overlayrubber</tt> executable. Click and drag with the leftmouse button to see rubberband drawing. Observe that the <a href="qglwidget.html">QGLWidget</a>does not redraw itself (no redraw debug messages are output), and yetthe image is not destroyed. Marvel at the coolness of X11 overlays!<p> <h2> Using this technique in a real application</h2><a name="2"></a><p> For clarity, this example program has been kept very simple. Here aresome hints for real application usage:<p> <ul><p> <li> <em>All normal widgets are in the overlay plane.</em> This means that youcan put all kinds of Qt widgets (your own or standard Qt widgets) ontop of the OpenGL image (widget), e.g. pushbuttons etc., and they canbe moved, resized, or removed without destroying the OpenGL image.<p> <li> <em>Using with geometry management.</em> The <a href="qlayout.html">QLayout</a> classes don't permitputting one widget (the overlay) on top of another (the OpenGLwidget); that would defy the whole purpose of the automatic layout.The solution is to add just one of them to the QLayout object. Have itkeep a pointer to the other (i.e. the <a href="qglwidget.html">QGLWidget</a> knows about itsoverlay widget or vice versa). Implement the resizeEvent() method ofthe widget you put in the layout, and make it call setGeometry() onthe other widget with its own geometry as parameters, thus keeping thetwo widgets' geometries synchronized.<p> <li> <em>Using together with <a href="qpalette.html">QPalette</a> and <a href="qcolorgroup.html">QColorGroup</a>.</em> Instead of thesimplistic setBackgroundColor( transparentColor ), you canuse Qt's QPalette system to make your overlay widgets usetransparent color for what you want. This way, the normal Qt widgetscan be used as overlays for fancy effects. Just create a palette forthem with the transparent color for the relevant color roles, e.g.Background and Base, in the Normal and/or Active modes. This way, youcan create see-through QPushButtons etc.</ul><p> <p>See also <a href="opengl-examples.html">OpenGL Examples</a>.<!-- eof --><p><address><hr><div align=center><table width=100% cellspacing=0 border=0><tr><td>Copyright © 2002 <a href="http://www.trolltech.com">Trolltech</a><td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a><td align=right><div align=right>Qt version 3.0.5</div></table></div></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -