Sophie

Sophie

distrib > Fedora > 18 > x86_64 > by-pkgid > ff187cb994c94c614ecc64c5a8528b1b > files > 4363

qt-doc-4.8.5-10.fc18.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- paintsystem.qdoc -->
  <title>Qt 4.8: Paint Devices and Backends</title>
  <link rel="stylesheet" type="text/css" href="style/style.css" />
  <script src="scripts/jquery.js" type="text/javascript"></script>
  <script src="scripts/functions.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="style/superfish.css" />
  <link rel="stylesheet" type="text/css" href="style/narrow.css" />
  <!--[if IE]>
<meta name="MSSmartTagsPreventParsing" content="true">
<meta http-equiv="imagetoolbar" content="no">
<![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie6.css">
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie7.css">
<![endif]-->
<!--[if IE 8]>
<link rel="stylesheet" type="text/css" href="style/style_ie8.css">
<![endif]-->

<script src="scripts/superfish.js" type="text/javascript"></script>
<script src="scripts/narrow.js" type="text/javascript"></script>

</head>
<body class="" onload="CheckEmptyAndLoadList();">
 <div class="header" id="qtdocheader">
    <div class="content"> 
    <div id="nav-logo">
      <a href="index.html">Home</a></div>
    <a href="index.html" class="qtref"><span>Qt Reference Documentation</span></a>
    <div id="narrowsearch"></div>
    <div id="nav-topright">
      <ul>
        <li class="nav-topright-home"><a href="http://qt.digia.com/">Qt HOME</a></li>
        <li class="nav-topright-dev"><a href="http://qt-project.org/">DEV</a></li>
        <li class="nav-topright-doc nav-topright-doc-active"><a href="http://qt-project.org/doc/">
          DOC</a></li>
        <li class="nav-topright-blog"><a href="http://blog.qt.digia.com/">BLOG</a></li>
      </ul>
    </div>
    <div id="shortCut">
      <ul>
        <li class="shortCut-topleft-inactive"><span><a href="index.html">Qt 4.8</a></span></li>
        <li class="shortCut-topleft-active"><a href="http://qt-project.org/doc/">ALL VERSIONS        </a></li>
      </ul>
     </div>
 <ul class="sf-menu" id="narrowmenu"> 
             <li><a href="#">API Lookup</a> 
                 <ul> 
                     <li><a href="classes.html">Class index</a></li> 
           <li><a href="functions.html">Function index</a></li> 
           <li><a href="modules.html">Modules</a></li> 
           <li><a href="namespaces.html">Namespaces</a></li> 
           <li><a href="qtglobal.html">Global Declarations</a></li> 
           <li><a href="qdeclarativeelements.html">QML elements</a></li> 
             </ul> 
             </li> 
             <li><a href="#">Qt Topics</a> 
                 <ul> 
                        <li><a href="qt-basic-concepts.html">Programming with Qt</a></li>  
                        <li><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li>  
                        <li><a href="qt-gui-concepts.html">UI Design with Qt</a></li>  
                        <li><a href="supported-platforms.html">Supported Platforms</a></li>  
                        <li><a href="technology-apis.html">Qt and Key Technologies</a></li>  
                        <li><a href="best-practices.html">How-To's and Best Practices</a></li>  
              </ul> 
                 </li> 
                 <li><a href="#">Examples</a> 
                     <ul> 
                       <li><a href="all-examples.html">Examples</a></li> 
                       <li><a href="tutorials.html">Tutorials</a></li> 
                       <li><a href="demos.html">Demos</a></li> 
                       <li><a href="qdeclarativeexamples.html">QML Examples</a></li> 
                </ul> 
                     </li> 
                 </ul> 
    </div>
  </div>
  <div class="wrapper">
    <div class="hd">
      <span></span>
    </div>
    <div class="bd group">
      <div class="sidebar">
        <div class="searchlabel">
          Search index:</div>
        <div class="search" id="sidebarsearch">
          <form id="qtdocsearch" action="" onsubmit="return false;">
            <fieldset>
              <input type="text" name="searchstring" id="pageType" value="" />
 <div id="resultdialog"> 
 <a href="#" id="resultclose">Close</a> 
 <p id="resultlinks" class="all"><a href="#" id="showallresults">All</a> | <a href="#" id="showapiresults">API</a> | <a href="#" id="showarticleresults">Articles</a> | <a href="#" id="showexampleresults">Examples</a></p> 
 <p id="searchcount" class="all"><span id="resultcount"></span><span id="apicount"></span><span id="articlecount"></span><span id="examplecount"></span>&nbsp;results:</p> 
 <ul id="resultlist" class="all"> 
 </ul> 
 </div> 
            </fieldset>
          </form>
        </div>
        <div class="box first bottombar" id="lookup">
          <h2 title="API Lookup"><span></span>
            API Lookup</h2>
          <div  id="list001" class="list">
          <ul id="ul001" >
              <li class="defaultLink"><a href="classes.html">Class index</a></li>
              <li class="defaultLink"><a href="functions.html">Function index</a></li>
              <li class="defaultLink"><a href="modules.html">Modules</a></li>
              <li class="defaultLink"><a href="namespaces.html">Namespaces</a></li>
              <li class="defaultLink"><a href="qtglobal.html">Global Declarations</a></li>
              <li class="defaultLink"><a href="qdeclarativeelements.html">QML elements</a></li>
            </ul> 
          </div>
        </div>
        <div class="box bottombar" id="topics">
          <h2 title="Qt Topics"><span></span>
            Qt Topics</h2>
          <div id="list002" class="list">
            <ul id="ul002" >
               <li class="defaultLink"><a href="qt-basic-concepts.html">Programming with Qt</a></li> 
               <li class="defaultLink"><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li> 
               <li class="defaultLink"><a href="qt-gui-concepts.html">UI Design with Qt</a></li> 
               <li class="defaultLink"><a href="supported-platforms.html">Supported Platforms</a></li>  
               <li class="defaultLink"><a href="technology-apis.html">Qt and Key Technologies</a></li> 
               <li class="defaultLink"><a href="best-practices.html">How-To's and Best Practices</a></li> 
            </ul>  
          </div>
        </div>
        <div class="box" id="examples">
          <h2 title="Examples"><span></span>
            Examples</h2>
          <div id="list003" class="list">
        <ul id="ul003">
              <li class="defaultLink"><a href="all-examples.html">Examples</a></li>
              <li class="defaultLink"><a href="tutorials.html">Tutorials</a></li>
              <li class="defaultLink"><a href="demos.html">Demos</a></li>
              <li class="defaultLink"><a href="qdeclarativeexamples.html">QML Examples</a></li>
            </ul> 
          </div>
        </div>
      </div>
      <div class="wrap">
        <div class="toolbar">
          <div class="breadcrumb toolblock">
            <ul>
              <li class="first"><a href="index.html">Home</a></li>
              <!--  Breadcrumbs go here -->
<li>Paint Devices and Backends</li>
            </ul>
          </div>
          <div class="toolbuttons toolblock">
            <ul>
              <li id="smallA" class="t_button">A</li>
              <li id="medA" class="t_button active">A</li>
              <li id="bigA" class="t_button">A</li>
              <li id="print" class="t_button"><a href="javascript:this.print();">
                <span>Print</span></a></li>
            </ul>
        </div>
        </div>
        <div class="content mainContent">
  <link rel="next" href="paintsystem-drawing.html" />
<p class="naviNextPrevious headerNavi">
<a class="nextPage" href="paintsystem-drawing.html">Drawing and Filling</a>
</p><p/>
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#creating-a-paint-device">Creating a Paint Device</a></li>
<li class="level1"><a href="#selecting-the-painting-backend">Selecting the Painting Backend</a></li>
</ul>
</div>
<h1 class="title">Paint Devices and Backends</h1>
<span class="subtitle"></span>
<!-- $$$paintsystem-devices.html-description -->
<div class="descr"> <a name="details"></a>
<a name="creating-a-paint-device"></a>
<h2>Creating a Paint Device</h2>
<p>The <a href="qpaintdevice.html">QPaintDevice</a> class is the base class of objects that can be painted, i.e&#x2e; <a href="qpainter.html">QPainter</a> can draw on any <a href="qpaintdevice.html">QPaintDevice</a> subclass. <a href="qpaintdevice.html">QPaintDevice</a>'s drawing capabilities are currently implemented by the <a href="qwidget.html">QWidget</a>, <a href="qimage.html">QImage</a>, <a href="qpixmap.html">QPixmap</a>, <a href="qglwidget.html">QGLWidget</a>, <a href="qglpixelbuffer.html">QGLPixelBuffer</a>, <a href="qpicture.html">QPicture</a> and <a href="qprinter.html">QPrinter</a> subclasses.</p>
<p class="centerAlign"><img src="images/paintsystem-devices.png" alt="" /></p><table class="generic" width="100%">
 <tr valign="top" class="odd"><td ><b>Widget</b><p>The <a href="qwidget.html">QWidget</a> class is the base class of all user interface objects. The widget is the atom of the user interface: it receives mouse, keyboard and other events from the window system, and paints a representation of itself on the screen.</p>
</td></tr>
<tr valign="top" class="even"><td ><b>Image</b><p>The <a href="qimage.html">QImage</a> class provides a hardware-independent image representation which is designed and optimized for I/O, and for direct pixel access and manipulation. <a href="qimage.html">QImage</a> supports several image formats including monochrome, 8-bit, 32-bit and alpha-blended images.</p>
<p>One advantage of using <a href="qimage.html">QImage</a> as a paint device is that it is possible to guarantee the pixel exactness of any drawing operation in a platform-independent way. Another benefit is that the painting can be performed in another thread than the current GUI thread.</p>
</td></tr>
<tr valign="top" class="odd"><td ><b>Pixmap</b><p>The <a href="qpixmap.html">QPixmap</a> class is an off-screen image representation which is designed and optimized for showing images on screen. Unlike <a href="qimage.html">QImage</a>, the pixel data in a pixmap is internal and is managed by the underlying window system, i.e&#x2e; pixels can only be accessed through <a href="qpainter.html">QPainter</a> functions or by converting the <a href="qpixmap.html">QPixmap</a> to a <a href="qimage.html">QImage</a>.</p>
<p>To optimize drawing with <a href="qpixmap.html">QPixmap</a>, Qt provides the <a href="qpixmapcache.html">QPixmapCache</a> class which can be used to store temporary pixmaps that are expensive to generate without using more storage space than the cache limit.</p>
<p>Qt also provides the <a href="qbitmap.html">QBitmap</a> convenience class, inheriting <a href="qpixmap.html">QPixmap</a>. <a href="qbitmap.html">QBitmap</a> guarantees monochrome (1-bit depth) pixmaps, and is mainly used for creating custom <a href="qcursor.html">QCursor</a> and <a href="qbrush.html">QBrush</a> objects, constructing <a href="qregion.html">QRegion</a> objects, and for setting masks for pixmaps and widgets.</p>
</td></tr>
<tr valign="top" class="even"><td ><b>OpenGL Widget</b><p>As mentioned previously, Qt provides the <a href="qtopengl.html">QtOpenGL</a> module offering classes that makes it easy to use OpenGL in Qt applications. For example, the <a href="qglwidget.html">QGLWidget</a> enables the OpenGL API for rendering.</p>
<p>But <a href="qglwidget.html">QGLWidget</a> is also a <a href="qwidget.html">QWidget</a> subclass, and can be used by <a href="qpainter.html">QPainter</a> as any other paint device. One huge benefit from this is that it enables Qt to utilize the high performance of OpenGL for most drawing operations, such as transformations and pixmap drawing.</p>
</td></tr>
<tr valign="top" class="odd"><td ><b>Pixel Buffer</b><p>The <a href="qtopengl.html">QtOpenGL</a> module also provides the <a href="qglpixelbuffer.html">QGLPixelBuffer</a> class which inherits <a href="qpaintdevice.html">QPaintDevice</a> directly.</p>
<p><a href="qglpixelbuffer.html">QGLPixelBuffer</a> encapsulates an OpenGL pbuffer. Rendering into a pbuffer is normally done using full hardware acceleration which can be significantly faster than rendering into a <a href="qpixmap.html">QPixmap</a>.</p>
</td></tr>
<tr valign="top" class="even"><td ><b>Framebuffer Object</b><p>The <a href="qtopengl.html">QtOpenGL</a> module also provides the <a href="qglframebufferobject.html">QGLFramebufferObject</a> class which inherits <a href="qpaintdevice.html">QPaintDevice</a> directly.</p>
<p><a href="qglframebufferobject.html">QGLFramebufferObject</a> encapsulates an OpenGL framebuffer object. Framebuffer objects can also be used for off-screen rendering, and offer several advantages over pixel buffers for this purpose. These are described in the <a href="qglframebufferobject.html">QGLFramebufferObject</a> class documentation.</p>
</td></tr>
<tr valign="top" class="odd"><td ><b>Picture</b><p>The <a href="qpicture.html">QPicture</a> class is a paint device that records and replays <a href="qpainter.html">QPainter</a> commands. A picture serializes painter commands to an IO device in a platform-independent format. <a href="qpicture.html">QPicture</a> is also resolution independent, i.e&#x2e; a <a href="qpicture.html">QPicture</a> can be displayed on different devices (for example svg, pdf, ps, printer and screen) looking the same.</p>
<p>Qt provides the <a href="qpicture.html#load">QPicture::load</a>() and <a href="qpicture.html#save">QPicture::save</a>() functions as well as streaming operators for loading and saving pictures.</p>
</td></tr>
<tr valign="top" class="even"><td ><b>Printer</b><p>The <a href="qprinter.html">QPrinter</a> class is a paint device that paints on a printer. On Windows or Mac OS X, <a href="qprinter.html">QPrinter</a> uses the built-in printer drivers. On X11, <a href="qprinter.html">QPrinter</a> generates postscript and sends that to lpr, lp, or another print program. <a href="qprinter.html">QPrinter</a> can also print to any other <a href="qprintengine.html">QPrintEngine</a> object.</p>
<p>The <a href="qprintengine.html">QPrintEngine</a> class defines an interface for how <a href="qprinter.html">QPrinter</a> interacts with a given printing subsystem. The common case when creating your own print engine, is to derive from both <a href="qpaintengine.html">QPaintEngine</a> and <a href="qprintengine.html">QPrintEngine</a>.</p>
<p>The output format is by default determined by the platform the printer is running on, but by explicitly setting the output format to <a href="qprinter.html#OutputFormat-enum">QPrinter::PdfFormat</a>, <a href="qprinter.html">QPrinter</a> will generate its output as a PDF file.</p>
</td></tr>
<tr valign="top" class="odd"><td ><b>Custom Backends</b><p>Support for a new backend can be implemented by deriving from the <a href="qpaintdevice.html">QPaintDevice</a> class and reimplementing the virtual <a href="qpaintdevice.html#paintEngine">QPaintDevice::paintEngine</a>() function to tell <a href="qpainter.html">QPainter</a> which paint engine should be used to draw on this particular device. To actually be able to draw on the device, this paint engine must be a custom paint engine created by deriving from the <a href="qpaintengine.html">QPaintEngine</a> class.</p>
</td></tr>
</table>
<a name="selecting-the-painting-backend"></a>
<h2>Selecting the Painting Backend</h2>
<p>Since Qt 4.5, it is possible to replace the paint engines and paint devices used for widgets, pixmaps and the offscreen double buffer. By default the backends are:</p>
<table class="generic">
<tr valign="top" class="odd"><td >Windows</td><td >Software Rasterizer</td></tr>
<tr valign="top" class="even"><td >X11</td><td >X11</td></tr>
<tr valign="top" class="odd"><td >Mac OS X</td><td >CoreGraphics</td></tr>
<tr valign="top" class="even"><td >Embedded</td><td >Software Rasterizer</td></tr>
</table>
<p>Passing a command line parameter to the application, such as, <tt>-graphicssystem raster</tt>, specifies that Qt should use the software rasterizer for this application. The Software rasterizer is fully supported on all platforms.</p>
<pre class="cpp"> <span class="operator">&gt;</span> analogclock <span class="operator">-</span>graphicssystem raster</pre>
<p>There is also a <tt>-graphicssystem opengl</tt> mode that uses OpenGL for all drawing. Currently, this engine is experimental as it does not draw everything correctly.</p>
<p>Qt also supports being configured using <tt>-graphicssystem raster|opengl</tt> in which case all applications will use the specified graphics system for its graphics.</p>
</div>
<!-- @@@paintsystem-devices.html -->
<p class="naviNextPrevious footerNavi">
<a class="nextPage" href="paintsystem-drawing.html">Drawing and Filling</a>
</p>
      </div>
    </div>
    </div> 
    <div class="ft">
      <span></span>
    </div>
  </div> 
  <div class="footer">
    <p>
      <acronym title="Copyright">&copy;</acronym> 2013 Digia Plc and/or its
      subsidiaries. Documentation contributions included herein are the copyrights of
      their respective owners.</p>
    <br />
    <p>
      The documentation provided herein is licensed under the terms of the
      <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation
      License version 1.3</a> as published by the Free Software Foundation.</p>
    <p>
      Documentation sources may be obtained from <a href="http://www.qt-project.org">
      www.qt-project.org</a>.</p>
    <br />
    <p>
      Digia, Qt and their respective logos are trademarks of Digia Plc 
      in Finland and/or other countries worldwide. All other trademarks are property
      of their respective owners. <a title="Privacy Policy"
      href="http://en.gitorious.org/privacy_policy/">Privacy Policy</a></p>
  </div>

  <script src="scripts/functions.js" type="text/javascript"></script>
</body>
</html>