Sophie

Sophie

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

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" />
<!-- qutlook.qdoc -->
  <title>Qt 4.8: Qutlook Example (ActiveQt)</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><a href="all-examples.html">Examples</a></li>
<li>Qutlook Example (ActiveQt)</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">
<h1 class="title">Qutlook Example (ActiveQt)</h1>
<span class="subtitle"></span>
<!-- $$$activeqt/qutlook-description -->
<div class="descr"> <a name="details"></a>
<p>Files:</p>
<ul>
<li><a href="activeqt-qutlook-addressview-cpp.html">activeqt/qutlook/addressview.cpp</a></li>
<li><a href="activeqt-qutlook-addressview-h.html">activeqt/qutlook/addressview.h</a></li>
<li><a href="activeqt-qutlook-main-cpp.html">activeqt/qutlook/main.cpp</a></li>
<li><a href="activeqt-qutlook-qutlook-pro.html">activeqt/qutlook/qutlook.pro</a></li>
</ul>
<p>The Qutlook example demonstrates the use of <a href="activeqt.html#activeqt">ActiveQt</a> to automate Outlook. The example makes use of the <a href="activeqt-dumpcpp.html#dumpcpp">dumpcpp</a> tool to generate a C++ namespace for the type library describing the Outlook Object Model.<p>The project file for the example looks like this:</p>
<pre class="cpp"> TEMPLATE = app
 TARGET   = qutlook
 CONFIG  += qaxcontainer

 TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})

 isEmpty(TYPELIBS) {
     message(&quot;Microsoft Outlook type library not found!&quot;)
     REQUIRES += Outlook
 } else {
     HEADERS  = addressview.h
     SOURCES  = addressview.cpp main.cpp
 }</pre>
<p>The project file uses the <tt>dumpcpp</tt> tool to add an MS Outlook type library to the project. If this fails, then the generated makefile will just print an error message, otherwise the build step will now run the <i>dumpcpp</i> tool on the type library, and generate a header and a cpp file (in this case, <tt>msoutl.h</tt> and <tt>msoutl.cpp</tt>) that declares and implement an easy to use API to the Outlook objects.</p>
<pre class="cpp"> <span class="keyword">class</span> AddressView : <span class="keyword">public</span> <span class="type"><a href="qwidget.html">QWidget</a></span>
 {
     Q_OBJECT

 <span class="keyword">public</span>:
     AddressView(<span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>parent <span class="operator">=</span> <span class="number">0</span>);

 <span class="keyword">protected</span> <span class="keyword">slots</span>:
     <span class="type">void</span> addEntry();
     <span class="type">void</span> changeEntry();
     <span class="type">void</span> itemSelected(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index);

     <span class="type">void</span> updateOutlook();

 <span class="keyword">protected</span>:
     AddressBookModel <span class="operator">*</span>model;

     <span class="type"><a href="qtreeview.html">QTreeView</a></span> <span class="operator">*</span>treeView;
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>add<span class="operator">,</span> <span class="operator">*</span>change;
     <span class="type"><a href="qlineedit.html">QLineEdit</a></span> <span class="operator">*</span>iFirstName<span class="operator">,</span> <span class="operator">*</span>iLastName<span class="operator">,</span> <span class="operator">*</span>iAddress<span class="operator">,</span> <span class="operator">*</span>iEMail;
 };</pre>
<p>The AddressView class is a <a href="qwidget.html">QWidget</a> subclass for the user interface. The <a href="qtreeview.html">QTreeView</a> widget will display the contents of Outlook's Contact folder as provided by the <tt>model</tt>.</p>
<pre class="cpp"> <span class="preprocessor">#include &quot;addressview.h&quot;</span>
 <span class="preprocessor">#include &quot;msoutl.h&quot;</span>
 <span class="preprocessor">#include &lt;QtGui&gt;</span>

 <span class="keyword">class</span> AddressBookModel : <span class="keyword">public</span> <span class="type"><a href="qabstractlistmodel.html">QAbstractListModel</a></span>
 {
 <span class="keyword">public</span>:
     AddressBookModel(AddressView <span class="operator">*</span>parent);
     <span class="operator">~</span>AddressBookModel();

     <span class="type">int</span> rowCount(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>parent <span class="operator">=</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span>()) <span class="keyword">const</span>;
     <span class="type">int</span> columnCount(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>parent) <span class="keyword">const</span>;
     <span class="type"><a href="qvariant.html">QVariant</a></span> headerData(<span class="type">int</span> section<span class="operator">,</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Orientation orientation<span class="operator">,</span> <span class="type">int</span> role) <span class="keyword">const</span>;
     <span class="type"><a href="qvariant.html">QVariant</a></span> data(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index<span class="operator">,</span> <span class="type">int</span> role) <span class="keyword">const</span>;

     <span class="type">void</span> changeItem(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>firstName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>lastName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>address<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>email);
     <span class="type">void</span> addItem(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>firstName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>lastName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>address<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>email);
     <span class="type">void</span> update();

 <span class="keyword">private</span>:
     Outlook<span class="operator">::</span>Application outlook;
     Outlook<span class="operator">::</span>Items <span class="operator">*</span> contactItems;

     <span class="keyword">mutable</span> <span class="type"><a href="qhash.html">QHash</a></span><span class="operator">&lt;</span><span class="type"><a href="qmodelindex.html">QModelIndex</a></span><span class="operator">,</span> <span class="type"><a href="qstringlist.html">QStringList</a></span><span class="operator">&gt;</span> cache;
 };</pre>
<p>The AddressBookModel class is a <a href="qabstractlistmodel.html">QAbstractListModel</a> subclass that communicates directly with Outlook, using a <a href="qhash.html">QHash</a> for caching.</p>
<pre class="cpp"> AddressBookModel<span class="operator">::</span>AddressBookModel(AddressView <span class="operator">*</span>parent)
 : <span class="type"><a href="qabstractlistmodel.html">QAbstractListModel</a></span>(parent)
 {
     <span class="keyword">if</span> (<span class="operator">!</span>outlook<span class="operator">.</span>isNull()) {
         Outlook<span class="operator">::</span>NameSpace session(outlook<span class="operator">.</span>Session());
         session<span class="operator">.</span>Logon();
         Outlook<span class="operator">::</span>MAPIFolder <span class="operator">*</span>folder <span class="operator">=</span> session<span class="operator">.</span>GetDefaultFolder(Outlook<span class="operator">::</span>olFolderContacts);
         contactItems <span class="operator">=</span> <span class="keyword">new</span> Outlook<span class="operator">::</span>Items(folder<span class="operator">-</span><span class="operator">&gt;</span>Items());
         connect(contactItems<span class="operator">,</span> SIGNAL(ItemAdd(IDispatch<span class="operator">*</span>))<span class="operator">,</span> parent<span class="operator">,</span> SLOT(updateOutlook()));
         connect(contactItems<span class="operator">,</span> SIGNAL(ItemChange(IDispatch<span class="operator">*</span>))<span class="operator">,</span> parent<span class="operator">,</span> SLOT(updateOutlook()));
         connect(contactItems<span class="operator">,</span> SIGNAL(ItemRemove())<span class="operator">,</span> parent<span class="operator">,</span> SLOT(updateOutlook()));

         <span class="keyword">delete</span> folder;
     }
 }</pre>
<p>The constructor initializes Outlook. The various signals Outlook provides to notify about contents changes are connected to the <tt>updateOutlook()</tt> slot.</p>
<pre class="cpp"> AddressBookModel<span class="operator">::</span><span class="operator">~</span>AddressBookModel()
 {
     <span class="keyword">delete</span> contactItems;

     <span class="keyword">if</span> (<span class="operator">!</span>outlook<span class="operator">.</span>isNull())
         Outlook<span class="operator">::</span>NameSpace(outlook<span class="operator">.</span>Session())<span class="operator">.</span>Logoff();
 }</pre>
<p>The destructor logs off from the session.</p>
<pre class="cpp"> <span class="type">int</span> AddressBookModel<span class="operator">::</span>rowCount(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>) <span class="keyword">const</span>
 {
     <span class="keyword">return</span> contactItems <span class="operator">?</span> contactItems<span class="operator">-</span><span class="operator">&gt;</span>Count() : <span class="number">0</span>;
 }

 <span class="type">int</span> AddressBookModel<span class="operator">::</span>columnCount(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>parent) <span class="keyword">const</span>
 {
     <span class="keyword">return</span> <span class="number">4</span>;
 }</pre>
<p>The <tt>rowCount()</tt> implementation returns the number of entries as reported by Outlook. <tt>columnCount</tt> and <tt>headerData</tt> are implemented to show four columns in the tree view.</p>
<pre class="cpp"> <span class="type"><a href="qvariant.html">QVariant</a></span> AddressBookModel<span class="operator">::</span>headerData(<span class="type">int</span> section<span class="operator">,</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>Orientation orientation<span class="operator">,</span> <span class="type">int</span> role) <span class="keyword">const</span>
 {
     <span class="keyword">if</span> (role <span class="operator">!</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>DisplayRole)
         <span class="keyword">return</span> <span class="type"><a href="qvariant.html">QVariant</a></span>();

     <span class="keyword">switch</span> (section) {
     <span class="keyword">case</span> <span class="number">0</span>:
         <span class="keyword">return</span> tr(<span class="string">&quot;First Name&quot;</span>);
     <span class="keyword">case</span> <span class="number">1</span>:
         <span class="keyword">return</span> tr(<span class="string">&quot;Last Name&quot;</span>);
     <span class="keyword">case</span> <span class="number">2</span>:
         <span class="keyword">return</span> tr(<span class="string">&quot;Address&quot;</span>);
     <span class="keyword">case</span> <span class="number">3</span>:
         <span class="keyword">return</span> tr(<span class="string">&quot;Email&quot;</span>);
     <span class="keyword">default</span>:
         <span class="keyword">break</span>;
     }

     <span class="keyword">return</span> <span class="type"><a href="qvariant.html">QVariant</a></span>();
 }</pre>
<p>The <tt>headerData()</tt> implementation returns hardcoded strings.</p>
<pre class="cpp"> <span class="type"><a href="qvariant.html">QVariant</a></span> AddressBookModel<span class="operator">::</span>data(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index<span class="operator">,</span> <span class="type">int</span> role) <span class="keyword">const</span>
 {
     <span class="keyword">if</span> (<span class="operator">!</span>index<span class="operator">.</span>isValid() <span class="operator">|</span><span class="operator">|</span> role <span class="operator">!</span><span class="operator">=</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>DisplayRole)
         <span class="keyword">return</span> <span class="type"><a href="qvariant.html">QVariant</a></span>();

     <span class="type"><a href="qstringlist.html">QStringList</a></span> data;
     <span class="keyword">if</span> (cache<span class="operator">.</span>contains(index)) {
         data <span class="operator">=</span> cache<span class="operator">.</span>value(index);
     } <span class="keyword">else</span> {
         Outlook<span class="operator">::</span>ContactItem contact(contactItems<span class="operator">-</span><span class="operator">&gt;</span>Item(index<span class="operator">.</span>row() <span class="operator">+</span> <span class="number">1</span>));
         data <span class="operator">&lt;</span><span class="operator">&lt;</span> contact<span class="operator">.</span>FirstName() <span class="operator">&lt;</span><span class="operator">&lt;</span> contact<span class="operator">.</span>LastName() <span class="operator">&lt;</span><span class="operator">&lt;</span> contact<span class="operator">.</span>HomeAddress() <span class="operator">&lt;</span><span class="operator">&lt;</span> contact<span class="operator">.</span>Email1Address();
         cache<span class="operator">.</span>insert(index<span class="operator">,</span> data);
     }

     <span class="keyword">if</span> (index<span class="operator">.</span>column() <span class="operator">&lt;</span> data<span class="operator">.</span>count())
         <span class="keyword">return</span> data<span class="operator">.</span>at(index<span class="operator">.</span>column());

     <span class="keyword">return</span> <span class="type"><a href="qvariant.html">QVariant</a></span>();
 }</pre>
<p>The <tt>data()</tt> implementation is the core of the model. If the requested data is in the cache the cached value is used, otherwise the data is acquired from Outlook.</p>
<pre class="cpp"> <span class="type">void</span> AddressBookModel<span class="operator">::</span>changeItem(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>firstName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>lastName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>address<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>email)
 {
     Outlook<span class="operator">::</span>ContactItem item(contactItems<span class="operator">-</span><span class="operator">&gt;</span>Item(index<span class="operator">.</span>row() <span class="operator">+</span> <span class="number">1</span>));

     item<span class="operator">.</span>SetFirstName(firstName);
     item<span class="operator">.</span>SetLastName(lastName);
     item<span class="operator">.</span>SetHomeAddress(address);
     item<span class="operator">.</span>SetEmail1Address(email);

     item<span class="operator">.</span>Save();

     cache<span class="operator">.</span>take(index);
 }</pre>
<p>The <tt>changeItem()</tt> slot is called when the user changes the current entry using the user interface. The Outlook item is accessed using the Outlook API, and is modified using the property setters. Finally, the item is saved to Outlook, and removed from the cache. Note that the model does not signal the view of the data change, as Outlook will emit a signal on its own.</p>
<pre class="cpp"> <span class="type">void</span> AddressBookModel<span class="operator">::</span>addItem(<span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>firstName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>lastName<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>address<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qstring.html">QString</a></span> <span class="operator">&amp;</span>email)
 {
     Outlook<span class="operator">::</span>ContactItem item(outlook<span class="operator">.</span>CreateItem(Outlook<span class="operator">::</span>olContactItem));
     <span class="keyword">if</span> (<span class="operator">!</span>item<span class="operator">.</span>isNull()) {
         item<span class="operator">.</span>SetFirstName(firstName);
         item<span class="operator">.</span>SetLastName(lastName);
         item<span class="operator">.</span>SetHomeAddress(address);
         item<span class="operator">.</span>SetEmail1Address(email);

         item<span class="operator">.</span>Save();
     }
 }</pre>
<p>The <tt>addItem()</tt> slot calls the CreateItem method of Outlook to create a new contact item, sets the properties of the new item to the values entered by the user and saves the item.</p>
<pre class="cpp"> <span class="type">void</span> AddressBookModel<span class="operator">::</span>update()
 {
     cache<span class="operator">.</span>clear();

     <span class="keyword">emit</span> reset();
 }</pre>
<p>The <tt>update()</tt> slot clears the cache, and emits the <a href="qtextstream.html#reset">reset</a>() signal to notify the view about the data change requiring a redraw of the contents.</p>
<pre class="cpp"> AddressView<span class="operator">::</span>AddressView(<span class="type"><a href="qwidget.html">QWidget</a></span> <span class="operator">*</span>parent)
 : <span class="type"><a href="qwidget.html">QWidget</a></span>(parent)
 {
     <span class="type"><a href="qgridlayout.html">QGridLayout</a></span> <span class="operator">*</span>mainGrid <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgridlayout.html">QGridLayout</a></span>(<span class="keyword">this</span>);

     <span class="type"><a href="qlabel.html">QLabel</a></span> <span class="operator">*</span>liFirstName <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(<span class="string">&quot;First &amp;Name&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     liFirstName<span class="operator">-</span><span class="operator">&gt;</span>resize(liFirstName<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(liFirstName<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">0</span>);

     <span class="type"><a href="qlabel.html">QLabel</a></span> <span class="operator">*</span>liLastName <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(<span class="string">&quot;&amp;Last Name&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     liLastName<span class="operator">-</span><span class="operator">&gt;</span>resize(liLastName<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(liLastName<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span>);

     <span class="type"><a href="qlabel.html">QLabel</a></span> <span class="operator">*</span>liAddress <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(<span class="string">&quot;Add&amp;ress&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     liAddress<span class="operator">-</span><span class="operator">&gt;</span>resize(liAddress<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(liAddress<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">2</span>);

     <span class="type"><a href="qlabel.html">QLabel</a></span> <span class="operator">*</span>liEMail <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlabel.html">QLabel</a></span>(<span class="string">&quot;&amp;E-Mail&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     liEMail<span class="operator">-</span><span class="operator">&gt;</span>resize(liEMail<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(liEMail<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">3</span>);

     add <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(<span class="string">&quot;A&amp;dd&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     add<span class="operator">-</span><span class="operator">&gt;</span>resize(add<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(add<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">4</span>);
     connect(add<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(addEntry()));

     iFirstName <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlineedit.html">QLineEdit</a></span>(<span class="keyword">this</span>);
     iFirstName<span class="operator">-</span><span class="operator">&gt;</span>resize(iFirstName<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(iFirstName<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">0</span>);
     liFirstName<span class="operator">-</span><span class="operator">&gt;</span>setBuddy(iFirstName);

     iLastName <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlineedit.html">QLineEdit</a></span>(<span class="keyword">this</span>);
     iLastName<span class="operator">-</span><span class="operator">&gt;</span>resize(iLastName<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(iLastName<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">1</span>);
     liLastName<span class="operator">-</span><span class="operator">&gt;</span>setBuddy(iLastName);

     iAddress <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlineedit.html">QLineEdit</a></span>(<span class="keyword">this</span>);
     iAddress<span class="operator">-</span><span class="operator">&gt;</span>resize(iAddress<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(iAddress<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">2</span>);
     liAddress<span class="operator">-</span><span class="operator">&gt;</span>setBuddy(iAddress);

     iEMail <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qlineedit.html">QLineEdit</a></span>(<span class="keyword">this</span>);
     iEMail<span class="operator">-</span><span class="operator">&gt;</span>resize(iEMail<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(iEMail<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">3</span>);
     liEMail<span class="operator">-</span><span class="operator">&gt;</span>setBuddy(iEMail);

     change <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(<span class="string">&quot;&amp;Change&quot;</span><span class="operator">,</span> <span class="keyword">this</span>);
     change<span class="operator">-</span><span class="operator">&gt;</span>resize(change<span class="operator">-</span><span class="operator">&gt;</span>sizeHint());
     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(change<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">4</span>);
     connect(change<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(changeEntry()));

     treeView <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qtreeview.html">QTreeView</a></span>(<span class="keyword">this</span>);
     treeView<span class="operator">-</span><span class="operator">&gt;</span>setSelectionMode(<span class="type"><a href="qtreeview.html">QTreeView</a></span><span class="operator">::</span>SingleSelection);
     treeView<span class="operator">-</span><span class="operator">&gt;</span>setRootIsDecorated(<span class="keyword">false</span>);

     model <span class="operator">=</span> <span class="keyword">new</span> AddressBookModel(<span class="keyword">this</span>);
     treeView<span class="operator">-</span><span class="operator">&gt;</span>setModel(model);

     connect(treeView<span class="operator">-</span><span class="operator">&gt;</span>selectionModel()<span class="operator">,</span> SIGNAL(currentChanged(<span class="type"><a href="qmodelindex.html">QModelIndex</a></span><span class="operator">,</span><span class="type"><a href="qmodelindex.html">QModelIndex</a></span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(itemSelected(<span class="type"><a href="qmodelindex.html">QModelIndex</a></span>)));

     mainGrid<span class="operator">-</span><span class="operator">&gt;</span>addWidget(treeView<span class="operator">,</span> <span class="number">2</span><span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">5</span>);
 }

 <span class="type">void</span> AddressView<span class="operator">::</span>updateOutlook()
 {
     model<span class="operator">-</span><span class="operator">&gt;</span>update();
 }

 <span class="type">void</span> AddressView<span class="operator">::</span>addEntry()
 {
     <span class="keyword">if</span> (<span class="operator">!</span>iFirstName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>isEmpty() <span class="operator">|</span><span class="operator">|</span> <span class="operator">!</span>iLastName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>isEmpty() <span class="operator">|</span><span class="operator">|</span>
          <span class="operator">!</span>iAddress<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>isEmpty() <span class="operator">|</span><span class="operator">|</span> <span class="operator">!</span>iEMail<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>isEmpty()) {
         model<span class="operator">-</span><span class="operator">&gt;</span>addItem(iFirstName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iFirstName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iAddress<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iEMail<span class="operator">-</span><span class="operator">&gt;</span>text());
     }

     iFirstName<span class="operator">-</span><span class="operator">&gt;</span>setText(<span class="string">&quot;&quot;</span>);
     iLastName<span class="operator">-</span><span class="operator">&gt;</span>setText(<span class="string">&quot;&quot;</span>);
     iAddress<span class="operator">-</span><span class="operator">&gt;</span>setText(<span class="string">&quot;&quot;</span>);
     iEMail<span class="operator">-</span><span class="operator">&gt;</span>setText(<span class="string">&quot;&quot;</span>);
 }

 <span class="type">void</span> AddressView<span class="operator">::</span>changeEntry()
 {
     <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> current <span class="operator">=</span> treeView<span class="operator">-</span><span class="operator">&gt;</span>currentIndex();

     <span class="keyword">if</span> (current<span class="operator">.</span>isValid())
         model<span class="operator">-</span><span class="operator">&gt;</span>changeItem(current<span class="operator">,</span> iFirstName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iLastName<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iAddress<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">,</span> iEMail<span class="operator">-</span><span class="operator">&gt;</span>text());
 }

 <span class="type">void</span> AddressView<span class="operator">::</span>itemSelected(<span class="keyword">const</span> <span class="type"><a href="qmodelindex.html">QModelIndex</a></span> <span class="operator">&amp;</span>index)
 {
     <span class="keyword">if</span> (<span class="operator">!</span>index<span class="operator">.</span>isValid())
         <span class="keyword">return</span>;

     <span class="type"><a href="qabstractitemmodel.html">QAbstractItemModel</a></span> <span class="operator">*</span>model <span class="operator">=</span> treeView<span class="operator">-</span><span class="operator">&gt;</span>model();
     iFirstName<span class="operator">-</span><span class="operator">&gt;</span>setText(model<span class="operator">-</span><span class="operator">&gt;</span>data(model<span class="operator">-</span><span class="operator">&gt;</span>index(index<span class="operator">.</span>row()<span class="operator">,</span> <span class="number">0</span>))<span class="operator">.</span>toString());
     iLastName<span class="operator">-</span><span class="operator">&gt;</span>setText(model<span class="operator">-</span><span class="operator">&gt;</span>data(model<span class="operator">-</span><span class="operator">&gt;</span>index(index<span class="operator">.</span>row()<span class="operator">,</span> <span class="number">1</span>))<span class="operator">.</span>toString());
     iAddress<span class="operator">-</span><span class="operator">&gt;</span>setText(model<span class="operator">-</span><span class="operator">&gt;</span>data(model<span class="operator">-</span><span class="operator">&gt;</span>index(index<span class="operator">.</span>row()<span class="operator">,</span> <span class="number">2</span>))<span class="operator">.</span>toString());
     iEMail<span class="operator">-</span><span class="operator">&gt;</span>setText(model<span class="operator">-</span><span class="operator">&gt;</span>data(model<span class="operator">-</span><span class="operator">&gt;</span>index(index<span class="operator">.</span>row()<span class="operator">,</span> <span class="number">3</span>))<span class="operator">.</span>toString());
 }</pre>
<p>The rest of the file implements the user interface using only Qt APIs, i.e&#x2e; without communicating with Outlook directly.</p>
<pre class="cpp"> <span class="preprocessor">#include &quot;addressview.h&quot;</span>
 <span class="preprocessor">#include &lt;QApplication&gt;</span>

 <span class="type">int</span> main(<span class="type">int</span> argc<span class="operator">,</span> <span class="type">char</span> <span class="operator">*</span><span class="operator">*</span> argv)
 {
     <span class="type"><a href="qapplication.html">QApplication</a></span> a(argc<span class="operator">,</span> argv);

     AddressView view;
     view<span class="operator">.</span>setWindowTitle(<span class="string">&quot;Qt Example - Looking at Outlook&quot;</span>);
     view<span class="operator">.</span>show();

     <span class="keyword">return</span> a<span class="operator">.</span>exec();
 }</pre>
<p>The <tt>main()</tt> entry point function finally instantiates the user interface and enters the event loop.</p>
<p>To build the example you must first build the <a href="qaxcontainer.html">QAxContainer</a> library. Then run your make tool in <tt>examples/activeqt/qutlook</tt> and run the resulting <tt>qutlook.exe</tt>.</p>
</div>
<!-- @@@activeqt/qutlook -->
      </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>