Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > core-updates > by-pkgid > d5e62c01ae8d1e579463c6a871dd44bf > files > 4686

qtbase5-doc-5.12.6-2.mga7.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- menus.qdoc -->
  <title>Menus Example | Qt Widgets 5.12.6</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td >Qt 5.12</td><td ><a href="qtwidgets-index.html">Qt Widgets</a></td><td >Menus Example</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right"><a href="qtwidgets-index.html">Qt 5.12.6 Reference Documentation</a></td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#mainwindow-class-definition">MainWindow Class Definition</a></li>
<li class="level1"><a href="#mainwindow-class-implementation">MainWindow Class Implementation</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Menus Example</h1>
<span class="subtitle"></span>
<!-- $$$mainwindows/menus-brief -->
<p>The Menus example demonstrates how menus can be used in a main window application.</p>
<!-- @@@mainwindows/menus -->
<!-- $$$mainwindows/menus-description -->
<div class="descr"> <a name="details"></a>
<p>A menu widget can be either a pull-down menu in a menu bar or a standalone context menu. Pull-down menus are shown by the menu bar when the user clicks on the respective item or presses the specified shortcut key. Context menus are usually invoked by some special keyboard key or by right-clicking.</p>
<p class="centerAlign"><img src="images/menus-example.png" alt="" /></p><p>A menu consists of a list of <i>action</i> items. In applications, many common commands can be invoked via menus, toolbar buttons as well as keyboard shortcuts. Since the user expects the commands to be performed in the same way, regardless of the user interface used, it is useful to represent each command as an action.</p>
<p>The Menus example consists of one single class, <code>MainWindow</code>, derived from the <a href="qmainwindow.html">QMainWindow</a> class. When choosing one of the action items in our application, it will display the item's path in its central widget.</p>
<a name="mainwindow-class-definition"></a>
<h2 id="mainwindow-class-definition">MainWindow Class Definition</h2>
<p><a href="qmainwindow.html">QMainWindow</a> provides a main application window, with a menu bar, tool bars, dock widgets and a status bar around a large central widget.</p>
<pre class="cpp">

  <span class="keyword">class</span> MainWindow : <span class="keyword">public</span> <span class="type"><a href="qmainwindow.html">QMainWindow</a></span>
  {
      Q_OBJECT

  <span class="keyword">public</span>:
      MainWindow();

  <span class="keyword">protected</span>:
  <span class="preprocessor">#ifndef QT_NO_CONTEXTMENU</span>
      <span class="type">void</span> contextMenuEvent(<span class="type"><a href="../qtgui/qcontextmenuevent.html">QContextMenuEvent</a></span> <span class="operator">*</span>event) override;
  <span class="preprocessor">#endif // QT_NO_CONTEXTMENU</span>

</pre>
<p>In this example, we will see how to implement pull-down menus as well as a context menu. In order to implement a custom context menu we must reimplement <a href="qwidget.html">QWidget</a>'s <a href="qwidget.html#contextMenuEvent">contextMenuEvent()</a> function to receive the context menu events for our main window.</p>
<pre class="cpp">

  <span class="keyword">private</span> <span class="keyword">slots</span>:
      <span class="type">void</span> newFile();
      <span class="type">void</span> open();
      <span class="type">void</span> save();
      <span class="type">void</span> print();
      <span class="type">void</span> undo();
      <span class="type">void</span> redo();
      <span class="type">void</span> cut();
      <span class="type">void</span> copy();
      <span class="type">void</span> paste();
      <span class="type">void</span> bold();
      <span class="type">void</span> italic();
      <span class="type">void</span> leftAlign();
      <span class="type">void</span> rightAlign();
      <span class="type">void</span> justify();
      <span class="type">void</span> center();
      <span class="type">void</span> setLineSpacing();
      <span class="type">void</span> setParagraphSpacing();
      <span class="type">void</span> about();
      <span class="type">void</span> aboutQt();

</pre>
<p>We must also implement a collection of private slots to respond to the user activating any of our menu entries. Note that these slots are left out of this documentation since they are trivial, i.e&#x2e;, most of them are only displaying the action's path in the main window's central widget.</p>
<pre class="cpp">

  <span class="keyword">private</span>:
      <span class="type">void</span> createActions();
      <span class="type">void</span> createMenus();

</pre>
<p>We have chosen to simplify the constructor by implementing two private convenience functions to create the various actions, to add them to menus and to insert the menus into our main window's menu bar.</p>
<pre class="cpp">

      <span class="type"><a href="qmenu.html">QMenu</a></span> <span class="operator">*</span>fileMenu;
      <span class="type"><a href="qmenu.html">QMenu</a></span> <span class="operator">*</span>editMenu;
      <span class="type"><a href="qmenu.html">QMenu</a></span> <span class="operator">*</span>formatMenu;
      <span class="type"><a href="qmenu.html">QMenu</a></span> <span class="operator">*</span>helpMenu;
      <span class="type"><a href="qactiongroup.html">QActionGroup</a></span> <span class="operator">*</span>alignmentGroup;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>newAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>openAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>saveAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>printAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>exitAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>undoAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>redoAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>cutAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>copyAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>pasteAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>boldAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>italicAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>leftAlignAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>rightAlignAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>justifyAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>centerAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>setLineSpacingAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>setParagraphSpacingAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>aboutAct;
      <span class="type"><a href="qaction.html">QAction</a></span> <span class="operator">*</span>aboutQtAct;
      <span class="type"><a href="qlabel.html">QLabel</a></span> <span class="operator">*</span>infoLabel;
  };

</pre>
<p>Finally, we declare the various menus and actions as well as a simple information label in the application wide scope.</p>
<p>The <a href="qmenu.html">QMenu</a> class provides a menu widget for use in menu bars, context menus, and other popup menus while the <a href="qaction.html">QAction</a> class provides an abstract user interface action that can be inserted into widgets.</p>
<p>In some situations it is useful to group actions together, e.g&#x2e;, we have a <b>Left Align</b> action, a <b>Right Align</b> action, a <b>Justify</b> action, and a <b>Center</b> action, and we want only one of these actions to be active at any one time. One simple way of achieving this is to group the actions together in an action group using the <a href="qactiongroup.html">QActionGroup</a> class.</p>
<a name="mainwindow-class-implementation"></a>
<h2 id="mainwindow-class-implementation">MainWindow Class Implementation</h2>
<p>In the constructor, we start off by creating a regular <a href="qwidget.html">QWidget</a> and make it our main window's central widget. Note that the main window takes ownership of the widget pointer and deletes it at the appropriate time.</p>
<pre class="cpp">

  MainWindow<span class="operator">::</span>MainWindow()
  {
      <span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qwidget.html">QWidget</a></span>;
      setCentralWidget(widget);

      <span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>topFiller <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qwidget.html">QWidget</a></span>;
      topFiller<span class="operator">-</span><span class="operator">&gt;</span>setSizePolicy(<span class="type"><a href="qsizepolicy.html">QSizePolicy</a></span><span class="operator">::</span>Expanding<span class="operator">,</span> <span class="type"><a href="qsizepolicy.html">QSizePolicy</a></span><span class="operator">::</span>Expanding);

      infoLabel <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(tr(<span class="string">&quot;&lt;i&gt;Choose a menu option, or right-click to &quot;</span>
                                <span class="string">&quot;invoke a context menu&lt;/i&gt;&quot;</span>));
      infoLabel<span class="operator">-</span><span class="operator">&gt;</span>setFrameStyle(<span class="type"><a href="qframe.html">QFrame</a></span><span class="operator">::</span>StyledPanel <span class="operator">|</span> <span class="type"><a href="qframe.html">QFrame</a></span><span class="operator">::</span>Sunken);
      infoLabel<span class="operator">-</span><span class="operator">&gt;</span>setAlignment(<span class="type"><a href="../qtcore/qt.html">Qt</a></span><span class="operator">::</span>AlignCenter);

      <span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>bottomFiller <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qwidget.html">QWidget</a></span>;
      bottomFiller<span class="operator">-</span><span class="operator">&gt;</span>setSizePolicy(<span class="type"><a href="qsizepolicy.html">QSizePolicy</a></span><span class="operator">::</span>Expanding<span class="operator">,</span> <span class="type"><a href="qsizepolicy.html">QSizePolicy</a></span><span class="operator">::</span>Expanding);

      <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span> <span class="operator">*</span>layout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span>;
      layout<span class="operator">-</span><span class="operator">&gt;</span>setMargin(<span class="number">5</span>);
      layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(topFiller);
      layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(infoLabel);
      layout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(bottomFiller);
      widget<span class="operator">-</span><span class="operator">&gt;</span>setLayout(layout);

</pre>
<p>Then we create the information label as well as a top and bottom filler that we add to a layout which we install on the central widget. <a href="qmainwindow.html">QMainWindow</a> objects come with their own customized layout and setting a layout on a the actual main window, or creating a layout with a main window as a parent, is considered an error. You should always set your own layout on the central widget instead.</p>
<pre class="cpp">

      createActions();
      createMenus();

      <span class="type"><a href="../qtcore/qstring.html">QString</a></span> message <span class="operator">=</span> tr(<span class="string">&quot;A context menu is available by right-clicking&quot;</span>);
      statusBar()<span class="operator">-</span><span class="operator">&gt;</span>showMessage(message);

      setWindowTitle(tr(<span class="string">&quot;Menus&quot;</span>));
      setMinimumSize(<span class="number">160</span><span class="operator">,</span> <span class="number">160</span>);
      resize(<span class="number">480</span><span class="operator">,</span> <span class="number">320</span>);
  }

</pre>
<p>To create the actions and menus we call our two convenience functions: <code>createActions()</code> and <code>createMenus()</code>. We will get back to these shortly.</p>
<p><a href="qmainwindow.html">QMainWindow</a>'s <a href="qmainwindow.html#statusBar">statusBar()</a> function returns the status bar for the main window (if the status bar does not exist, this function will create and return an empty status bar). We initialize the status bar and window title, resize the window to an appropriate size as well as ensure that the main window cannot be resized to a smaller size than the given one.</p>
<p>Now, let's take a closer look at the <code>createActions()</code> convenience function that creates the various actions:</p>
<pre class="cpp">

  <span class="type">void</span> MainWindow<span class="operator">::</span>createActions()
  {
      newAct <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qaction.html">QAction</a></span>(tr(<span class="string">&quot;&amp;New&quot;</span>)<span class="operator">,</span> <span class="keyword">this</span>);
      newAct<span class="operator">-</span><span class="operator">&gt;</span>setShortcuts(<span class="type"><a href="../qtgui/qkeysequence.html">QKeySequence</a></span><span class="operator">::</span>New);
      newAct<span class="operator">-</span><span class="operator">&gt;</span>setStatusTip(tr(<span class="string">&quot;Create a new file&quot;</span>));
      connect(newAct<span class="operator">,</span> <span class="operator">&amp;</span><span class="type"><a href="qaction.html">QAction</a></span><span class="operator">::</span>triggered<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&amp;</span>MainWindow<span class="operator">::</span>newFile);
      ...

</pre>
<p>A <a href="qaction.html">QAction</a> object may contain an icon, a text, a shortcut, a status tip, a &quot;What's This?&quot; text, and a tooltip. Most of these can be set in the constructor, but they can also be set independently using the provided convenience functions.</p>
<p>In the <code>createActions()</code> function, we first create a <code>newAct</code> action. We make <b>Ctrl+N</b> its shortcut using the <a href="qaction.html#shortcut-prop">QAction::setShortcut</a>() function, and we set its status tip using the <a href="qaction.html#statusTip-prop">QAction::setStatusTip</a>() function (the status tip is displayed on all status bars provided by the action's top-level parent widget). We also connect its <a href="qaction.html#triggered">triggered()</a> signal to the <code>newFile()</code> slot.</p>
<p>The rest of the actions are created in a similar manner. Please see the source code for details.</p>
<pre class="cpp">

      alignmentGroup <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qactiongroup.html">QActionGroup</a></span>(<span class="keyword">this</span>);
      alignmentGroup<span class="operator">-</span><span class="operator">&gt;</span>addAction(leftAlignAct);
      alignmentGroup<span class="operator">-</span><span class="operator">&gt;</span>addAction(rightAlignAct);
      alignmentGroup<span class="operator">-</span><span class="operator">&gt;</span>addAction(justifyAct);
      alignmentGroup<span class="operator">-</span><span class="operator">&gt;</span>addAction(centerAct);
      leftAlignAct<span class="operator">-</span><span class="operator">&gt;</span>setChecked(<span class="keyword">true</span>);
  }

</pre>
<p>Once we have created the <b>Left Align</b>, <b>Right Align</b>, <b>Justify</b>, and a <b>Center</b> actions, we can also create the previously mentioned action group.</p>
<p>Each action is added to the group using <a href="qactiongroup.html">QActionGroup</a>'s <a href="qactiongroup.html#addAction">addAction()</a> function. Note that an action also can be added to a group by creating it with the group as its parent. Since an action group is exclusive by default, only one of the actions in the group is checked at any one time (this can be altered using the <a href="qactiongroup.html#exclusive-prop">QActionGroup::setExclusive</a>() function).</p>
<p>When all the actions are created, we use the <code>createMenus()</code> function to add the actions to the menus and to insert the menus into the menu bar:</p>
<pre class="cpp">

  <span class="type">void</span> MainWindow<span class="operator">::</span>createMenus()
  {
      fileMenu <span class="operator">=</span> menuBar()<span class="operator">-</span><span class="operator">&gt;</span>addMenu(tr(<span class="string">&quot;&amp;File&quot;</span>));
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(newAct);
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(openAct);
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(saveAct);
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(printAct);
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addSeparator();
      fileMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(exitAct);

      editMenu <span class="operator">=</span> menuBar()<span class="operator">-</span><span class="operator">&gt;</span>addMenu(tr(<span class="string">&quot;&amp;Edit&quot;</span>));
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(undoAct);
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(redoAct);
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addSeparator();
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(cutAct);
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(copyAct);
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(pasteAct);
      editMenu<span class="operator">-</span><span class="operator">&gt;</span>addSeparator();

      helpMenu <span class="operator">=</span> menuBar()<span class="operator">-</span><span class="operator">&gt;</span>addMenu(tr(<span class="string">&quot;&amp;Help&quot;</span>));
      helpMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(aboutAct);
      helpMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(aboutQtAct);

</pre>
<p><a href="qmenubar.html">QMenuBar</a>'s <a href="qmenubar.html#addMenu">addMenu()</a> function appends a new <a href="qmenu.html">QMenu</a> with the given title, to the menu bar (note that the menu bar takes ownership of the menu). We use <a href="qwidget.html">QWidget</a>'s <a href="qwidget.html#addAction">addAction()</a> function to add each action to the corresponding menu.</p>
<p>Alternatively, the <a href="qmenu.html">QMenu</a> class provides several <a href="qmenu.html#addAction">addAction()</a> convenience functions that create and add new actions from given texts and/or icons. You can also provide a member that will automatically connect to the new action's <a href="qaction.html#triggered">triggered()</a> signal, and a shortcut represented by a <a href="../qtgui/qkeysequence.html">QKeySequence</a> instance.</p>
<p>The <a href="qmenu.html#addSeparator">QMenu::addSeparator</a>() function creates and returns a new separator action, i.e&#x2e; an action for which <a href="qaction.html#isSeparator">QAction::isSeparator</a>() returns true, and adds the new action to the menu's list of actions.</p>
<pre class="cpp">

      formatMenu <span class="operator">=</span> editMenu<span class="operator">-</span><span class="operator">&gt;</span>addMenu(tr(<span class="string">&quot;&amp;Format&quot;</span>));
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(boldAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(italicAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addSeparator()<span class="operator">-</span><span class="operator">&gt;</span>setText(tr(<span class="string">&quot;Alignment&quot;</span>));
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(leftAlignAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(rightAlignAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(justifyAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(centerAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addSeparator();
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(setLineSpacingAct);
      formatMenu<span class="operator">-</span><span class="operator">&gt;</span>addAction(setParagraphSpacingAct);
  }

</pre>
<p>Note the <b>Format</b> menu. First of all, it is added as a submenu to the <b>Edit</b> Menu using <a href="qmenu.html">QMenu</a>'s <a href="qmenu.html#addMenu">addMenu()</a> function. Secondly, take a look at the alignment actions: In the <code>createActions()</code> function we added the <code>leftAlignAct</code>, <code>rightAlignAct</code>, <code>justifyAct</code> and <code>centerAct</code> actions to an action group. Nevertheless, we must add each action to the menu separately while the action group does its magic behind the scene.</p>
<pre class="cpp">

  <span class="preprocessor">#ifndef QT_NO_CONTEXTMENU</span>
  <span class="type">void</span> MainWindow<span class="operator">::</span>contextMenuEvent(<span class="type"><a href="../qtgui/qcontextmenuevent.html">QContextMenuEvent</a></span> <span class="operator">*</span>event)
  {
      <span class="type"><a href="qmenu.html">QMenu</a></span> menu(<span class="keyword">this</span>);
      menu<span class="operator">.</span>addAction(cutAct);
      menu<span class="operator">.</span>addAction(copyAct);
      menu<span class="operator">.</span>addAction(pasteAct);
      menu<span class="operator">.</span>exec(event<span class="operator">-</span><span class="operator">&gt;</span>globalPos());
  }
  <span class="preprocessor">#endif // QT_NO_CONTEXTMENU</span>

</pre>
<p>To provide a custom context menu, we must reimplement <a href="qwidget.html">QWidget</a>'s <a href="qwidget.html#contextMenuEvent">contextMenuEvent()</a> function to receive the widget's context menu events (note that the default implementation simply ignores these events).</p>
<p>Whenever we receive such an event, we create a menu containing the <b>Cut</b>, <b>Copy</b> and <b>Paste</b> actions. Context menus can be executed either asynchronously using the <a href="qmenu.html#popup">popup()</a> function or synchronously using the <a href="qmenu.html#exec">exec()</a> function. In this example, we have chosen to show the menu using its <a href="qmenu.html#exec">exec()</a> function. By passing the event's position as argument we ensure that the context menu appears at the expected position.</p>
<p>Files:</p>
<ul>
<li><a href="qtwidgets-mainwindows-menus-main-cpp.html">mainwindows/menus/main.cpp</a></li>
<li><a href="qtwidgets-mainwindows-menus-mainwindow-cpp.html">mainwindows/menus/mainwindow.cpp</a></li>
<li><a href="qtwidgets-mainwindows-menus-mainwindow-h.html">mainwindows/menus/mainwindow.h</a></li>
<li><a href="qtwidgets-mainwindows-menus-menus-pro.html">mainwindows/menus/menus.pro</a></li>
</ul>
</div>
<!-- @@@mainwindows/menus -->
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2019 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br/>    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.<br/>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>