source: trunk/doc/html/listviews-example.html

Last change on this file was 190, checked in by rudi, 14 years ago

reference documentation added

File size: 21.2 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<!-- /home/espenr/tmp/qt-3.3.8-espenr-2499/qt-x11-free-3.3.8/examples/listviews/listviews.doc:4 -->
3<html>
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6<title>Listviews</title>
7<style type="text/css"><!--
8fn { margin-left: 1cm; text-indent: -1cm; }
9a:link { color: #004faf; text-decoration: none }
10a:visited { color: #672967; text-decoration: none }
11body { background: #ffffff; color: black; }
12--></style>
13</head>
14<body>
15
16<table border="0" cellpadding="0" cellspacing="0" width="100%">
17<tr bgcolor="#E5E5E5">
18<td valign=center>
19 <a href="index.html">
20<font color="#004faf">Home</font></a>
21 | <a href="classes.html">
22<font color="#004faf">All&nbsp;Classes</font></a>
23 | <a href="mainclasses.html">
24<font color="#004faf">Main&nbsp;Classes</font></a>
25 | <a href="annotated.html">
26<font color="#004faf">Annotated</font></a>
27 | <a href="groups.html">
28<font color="#004faf">Grouped&nbsp;Classes</font></a>
29 | <a href="functions.html">
30<font color="#004faf">Functions</font></a>
31</td>
32<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>Listviews</h1>
33
34
35<p>
36This examples shows how to work with listviews (hierarchical and multi-column).
37It also shows how to subclass listview items for special reasons. It looks
38and works like the main window of a mail client.
39<p> <hr>
40<p> Header file:
41<p> <pre>/****************************************************************************
42** $Id: listviews-example.html 2051 2007-02-21 10:04:20Z chehrlic $
43**
44** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
45**
46** This file is part of an example program for Qt. This example
47** program may be used, distributed and modified without limitation.
48**
49*****************************************************************************/
50
51#ifndef LISTVIEWS_H
52#define LISTVIEWS_H
53
54#include &lt;<a href="qsplitter-h.html">qsplitter.h</a>&gt;
55#include &lt;<a href="qstring-h.html">qstring.h</a>&gt;
56#include &lt;<a href="qobject-h.html">qobject.h</a>&gt;
57#include &lt;<a href="qdatetime-h.html">qdatetime.h</a>&gt;
58#include &lt;<a href="qptrlist-h.html">qptrlist.h</a>&gt;
59#include &lt;<a href="qlistview-h.html">qlistview.h</a>&gt;
60
61class QListView;
62class QLabel;
63class QPainter;
64class QColorGroup;
65class QObjectList;
66class QPopupMenu;
67
68// -----------------------------------------------------------------
69
70class MessageHeader
71{
72public:
73 MessageHeader( const <a href="qstring.html">QString</a> &amp;_sender, const <a href="qstring.html">QString</a> &amp;_subject, const <a href="qdatetime.html">QDateTime</a> &amp;_datetime )
74 : msender( _sender ), msubject( _subject ), mdatetime( _datetime )
75 {}
76
77 MessageHeader( const MessageHeader &amp;mh );
78 MessageHeader &amp;operator=( const MessageHeader &amp;mh );
79
80 <a href="qstring.html">QString</a> sender() { return msender; }
81 <a href="qstring.html">QString</a> subject() { return msubject; }
82 <a href="qdatetime.html">QDateTime</a> datetime() { return mdatetime; }
83
84protected:
85 <a href="qstring.html">QString</a> msender, msubject;
86 <a href="qdatetime.html">QDateTime</a> mdatetime;
87
88};
89
90// -----------------------------------------------------------------
91
92class Message
93{
94public:
95 enum State { Read = 0,
96 Unread};
97
98 Message( const MessageHeader &amp;mh, const <a href="qstring.html">QString</a> &amp;_body )
99 : mheader( mh ), mbody( _body ), mstate( Unread )
100 {}
101
102 Message( const Message &amp;m )
103 : mheader( m.mheader ), mbody( m.mbody ), mstate( m.mstate )
104 {}
105
106 MessageHeader header() { return mheader; }
107 <a href="qstring.html">QString</a> body() { return mbody; }
108
109 void setState( const State &amp;s ) { mstate = s; }
110 State state() { return mstate; }
111
112protected:
113 MessageHeader mheader;
114 <a href="qstring.html">QString</a> mbody;
115 State mstate;
116
117};
118
119// -----------------------------------------------------------------
120
121class Folder : public <a href="qobject.html">QObject</a>
122{
123 <a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a>
124
125public:
126 Folder( Folder *parent, const <a href="qstring.html">QString</a> &amp;name );
127 ~Folder()
128 {}
129
130 void addMessage( Message *m )
131<a name="x131"></a> { lstMessages.<a href="qptrlist.html#append">append</a>( m ); }
132
133 <a href="qstring.html">QString</a> folderName() { return fName; }
134
135<a name="x132"></a> Message *firstMessage() { return lstMessages.<a href="qptrlist.html#first">first</a>(); }
136<a name="x133"></a> Message *nextMessage() { return lstMessages.<a href="qptrlist.html#next">next</a>(); }
137
138protected:
139 <a href="qstring.html">QString</a> fName;
140 <a href="qptrlist.html">QPtrList</a>&lt;Message&gt; lstMessages;
141
142};
143
144// -----------------------------------------------------------------
145
146class FolderListItem : public <a href="qlistviewitem.html">QListViewItem</a>
147{
148public:
149 FolderListItem( <a href="qlistview.html">QListView</a> *parent, Folder *f );
150 FolderListItem( FolderListItem *parent, Folder *f );
151
152 void insertSubFolders( const <a href="qobjectlist.html">QObjectList</a> *lst );
153
154 Folder *folder() { return myFolder; }
155
156protected:
157 Folder *myFolder;
158
159};
160
161// -----------------------------------------------------------------
162
163class MessageListItem : public <a href="qlistviewitem.html">QListViewItem</a>
164{
165public:
166 MessageListItem( <a href="qlistview.html">QListView</a> *parent, Message *m );
167
168 virtual void paintCell( <a href="qpainter.html">QPainter</a> *p, const <a href="qcolorgroup.html">QColorGroup</a> &amp;cg,
169 int column, int width, int alignment );
170
171 Message *message() { return myMessage; }
172
173protected:
174 Message *myMessage;
175
176};
177
178// -----------------------------------------------------------------
179
180class ListViews : public <a href="qsplitter.html">QSplitter</a>
181{
182 Q_OBJECT
183
184public:
185 ListViews( <a href="qwidget.html">QWidget</a> *parent = 0, const char *name = 0 );
186 ~ListViews()
187 {}
188
189protected:
190 void initFolders();
191 void initFolder( Folder *folder, unsigned int &amp;count );
192 void setupFolders();
193
194 <a href="qlistview.html">QListView</a> *messages, *folders;
195 <a href="qlabel.html">QLabel</a> *message;
196 <a href="qpopupmenu.html">QPopupMenu</a>* menu;
197
198 <a href="qptrlist.html">QPtrList</a>&lt;Folder&gt; lstFolders;
199
200protected slots:
201 void slotFolderChanged( <a href="qlistviewitem.html">QListViewItem</a>* );
202 void slotMessageChanged();
203 void slotRMB( <a href="qlistviewitem.html">QListViewItem</a>*, const <a href="qpoint.html">QPoint</a> &amp;, int );
204
205};
206
207#endif
208</pre>
209
210<p> <hr>
211<p> Implementation:
212<p> <pre>/****************************************************************************
213** $Id: listviews-example.html 2051 2007-02-21 10:04:20Z chehrlic $
214**
215** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
216**
217** This file is part of an example program for Qt. This example
218** program may be used, distributed and modified without limitation.
219**
220*****************************************************************************/
221
222#include "listviews.h"
223
224#include &lt;<a href="qlabel-h.html">qlabel.h</a>&gt;
225#include &lt;<a href="qpainter-h.html">qpainter.h</a>&gt;
226#include &lt;<a href="qpalette-h.html">qpalette.h</a>&gt;
227#include &lt;<a href="qobjectlist-h.html">qobjectlist.h</a>&gt;
228#include &lt;<a href="qpopupmenu-h.html">qpopupmenu.h</a>&gt;
229#include &lt;<a href="qheader-h.html">qheader.h</a>&gt;
230#include &lt;<a href="qregexp-h.html">qregexp.h</a>&gt;
231
232// -----------------------------------------------------------------
233
234MessageHeader::MessageHeader( const MessageHeader &amp;mh )
235{
236 msender = mh.msender;
237 msubject = mh.msubject;
238 mdatetime = mh.mdatetime;
239}
240
241MessageHeader &amp;MessageHeader::operator=( const MessageHeader &amp;mh )
242{
243 msender = mh.msender;
244 msubject = mh.msubject;
245 mdatetime = mh.mdatetime;
246
247 return *this;
248}
249
250// -----------------------------------------------------------------
251
252<a name="f208"></a>Folder::Folder( Folder *parent, const <a href="qstring.html">QString</a> &amp;name )
253 : <a href="qobject.html">QObject</a>( parent, name ), fName( name )
254{
255 lstMessages.setAutoDelete( TRUE );
256}
257
258// -----------------------------------------------------------------
259
260<a name="f209"></a>FolderListItem::FolderListItem( <a href="qlistview.html">QListView</a> *parent, Folder *f )
261 : <a href="qlistviewitem.html">QListViewItem</a>( parent )
262{
263 myFolder = f;
264 <a href="qlistviewitem.html#setText">setText</a>( 0, f-&gt;folderName() );
265
266 if ( myFolder-&gt;children() )
267 insertSubFolders( myFolder-&gt;children() );
268}
269
270FolderListItem::FolderListItem( FolderListItem *parent, Folder *f )
271 : <a href="qlistviewitem.html">QListViewItem</a>( parent )
272{
273 myFolder = f;
274
275 <a href="qlistviewitem.html#setText">setText</a>( 0, f-&gt;folderName() );
276
277 if ( myFolder-&gt;children() )
278 insertSubFolders( myFolder-&gt;children() );
279}
280
281void <a name="f210"></a>FolderListItem::insertSubFolders( const <a href="qobjectlist.html">QObjectList</a> *lst )
282{
283 Folder *f;
284 for ( f = ( Folder* )( ( <a href="qobjectlist.html">QObjectList</a>* )lst )-&gt;first(); f; f = ( Folder* )( ( <a href="qobjectlist.html">QObjectList</a>* )lst )-&gt;next() )
285 (void)new FolderListItem( this, f );
286}
287
288// -----------------------------------------------------------------
289
290<a name="f218"></a>MessageListItem::MessageListItem( <a href="qlistview.html">QListView</a> *parent, Message *m )
291 : <a href="qlistviewitem.html">QListViewItem</a>( parent )
292{
293 myMessage = m;
294 <a href="qlistviewitem.html#setText">setText</a>( 0, myMessage-&gt;header().sender() );
295 <a href="qlistviewitem.html#setText">setText</a>( 1, myMessage-&gt;header().subject() );
296 <a href="qlistviewitem.html#setText">setText</a>( 2, myMessage-&gt;header().datetime().toString() );
297}
298
299<a name="x157"></a>void MessageListItem::<a href="qlistviewitem.html#paintCell">paintCell</a>( <a href="qpainter.html">QPainter</a> *p, const <a href="qcolorgroup.html">QColorGroup</a> &amp;cg,
300 int column, int width, int alignment )
301{
302 <a href="qcolorgroup.html">QColorGroup</a> _cg( cg );
303<a name="x135"></a> <a href="qcolor.html">QColor</a> c = _cg.<a href="qcolorgroup.html#text">text</a>();
304
305 if ( myMessage-&gt;state() == Message::Unread )
306<a name="x134"></a> _cg.<a href="qcolorgroup.html#setColor">setColor</a>( QColorGroup::Text, Qt::red );
307
308 QListViewItem::<a href="qlistviewitem.html#paintCell">paintCell</a>( p, _cg, column, width, alignment );
309
310 _cg.<a href="qcolorgroup.html#setColor">setColor</a>( QColorGroup::Text, c );
311}
312
313// -----------------------------------------------------------------
314
315<a name="f211"></a>ListViews::ListViews( <a href="qwidget.html">QWidget</a> *parent, const char *name )
316 : <a href="qsplitter.html">QSplitter</a>( Qt::Horizontal, parent, name )
317{
318 lstFolders.setAutoDelete( TRUE );
319
320 folders = new <a href="qlistview.html">QListView</a>( this );
321<a name="x147"></a> folders-&gt;<a href="qlistview.html#header">header</a>()-&gt;setClickEnabled( FALSE );
322<a name="x141"></a> folders-&gt;<a href="qlistview.html#addColumn">addColumn</a>( "Folder" );
323
324 initFolders();
325 setupFolders();
326
327<a name="x152"></a> folders-&gt;<a href="qlistview.html#setRootIsDecorated">setRootIsDecorated</a>( TRUE );
328 <a href="qsplitter.html#setResizeMode">setResizeMode</a>( folders, QSplitter::KeepSize );
329
330 <a href="qsplitter.html">QSplitter</a> *vsplitter = new <a href="qsplitter.html">QSplitter</a>( Qt::Vertical, this );
331
332 messages = new <a href="qlistview.html">QListView</a>( vsplitter );
333 messages-&gt;<a href="qlistview.html#addColumn">addColumn</a>( "Sender" );
334 messages-&gt;<a href="qlistview.html#addColumn">addColumn</a>( "Subject" );
335 messages-&gt;<a href="qlistview.html#addColumn">addColumn</a>( "Date" );
336<a name="x150"></a> messages-&gt;<a href="qlistview.html#setColumnAlignment">setColumnAlignment</a>( 1, Qt::AlignRight );
337<a name="x149"></a> messages-&gt;<a href="qlistview.html#setAllColumnsShowFocus">setAllColumnsShowFocus</a>( TRUE );
338<a name="x155"></a> messages-&gt;<a href="qlistview.html#setShowSortIndicator">setShowSortIndicator</a>( TRUE );
339 menu = new <a href="qpopupmenu.html">QPopupMenu</a>( messages );
340 for( int i = 1; i &lt;= 10; i++ )
341 menu-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( QString( "Context Item %1" ).arg( i ) );
342<a name="x143"></a> <a href="qobject.html#connect">connect</a>(messages, SIGNAL( <a href="qlistview.html#contextMenuRequested">contextMenuRequested</a>( <a href="qlistviewitem.html">QListViewItem</a> *, const <a href="qpoint.html">QPoint</a>&amp; , int ) ),
343 this, SLOT( slotRMB( <a href="qlistviewitem.html">QListViewItem</a> *, const <a href="qpoint.html">QPoint</a> &amp;, int ) ) );
344<a name="x161"></a> vsplitter-&gt;<a href="qsplitter.html#setResizeMode">setResizeMode</a>( messages, QSplitter::KeepSize );
345
346 message = new <a href="qlabel.html">QLabel</a>( vsplitter );
347 message-&gt;<a href="qlabel.html#setAlignment">setAlignment</a>( Qt::AlignTop );
348<a name="x163"></a> message-&gt;<a href="qwidget.html#setBackgroundMode">setBackgroundMode</a>( PaletteBase );
349
350<a name="x148"></a> <a href="qobject.html#connect">connect</a>( folders, SIGNAL( <a href="qlistview.html#selectionChanged">selectionChanged</a>( <a href="qlistviewitem.html">QListViewItem</a>* ) ),
351 this, SLOT( slotFolderChanged( <a href="qlistviewitem.html">QListViewItem</a>* ) ) );
352 <a href="qobject.html#connect">connect</a>( messages, SIGNAL( <a href="qlistview.html#selectionChanged">selectionChanged</a>() ),
353 this, SLOT( slotMessageChanged() ) );
354<a name="x144"></a> <a href="qobject.html#connect">connect</a>( messages, SIGNAL( <a href="qlistview.html#currentChanged">currentChanged</a>( <a href="qlistviewitem.html">QListViewItem</a> * ) ),
355 this, SLOT( slotMessageChanged() ) );
356
357<a name="x154"></a> messages-&gt;<a href="qlistview.html#setSelectionMode">setSelectionMode</a>( QListView::Extended );
358 // some preparations
359<a name="x146"></a> folders-&gt;<a href="qlistview.html#firstChild">firstChild</a>()-&gt;setOpen( TRUE );
360 folders-&gt;<a href="qlistview.html#firstChild">firstChild</a>()-&gt;firstChild()-&gt;setOpen( TRUE );
361<a name="x151"></a> folders-&gt;<a href="qlistview.html#setCurrentItem">setCurrentItem</a>( folders-&gt;<a href="qlistview.html#firstChild">firstChild</a>()-&gt;firstChild()-&gt;firstChild() );
362<a name="x153"></a> folders-&gt;<a href="qlistview.html#setSelected">setSelected</a>( folders-&gt;<a href="qlistview.html#firstChild">firstChild</a>()-&gt;firstChild()-&gt;firstChild(), TRUE );
363
364 messages-&gt;<a href="qlistview.html#setSelected">setSelected</a>( messages-&gt;<a href="qlistview.html#firstChild">firstChild</a>(), TRUE );
365 messages-&gt;<a href="qlistview.html#setCurrentItem">setCurrentItem</a>( messages-&gt;<a href="qlistview.html#firstChild">firstChild</a>() );
366 message-&gt;<a href="qframe.html#setMargin">setMargin</a>( 5 );
367
368 <a href="qvaluelist.html">QValueList</a>&lt;int&gt; lst;
369<a name="x160"></a> lst.<a href="qptrlist.html#append">append</a>( 170 );
370 <a href="qsplitter.html#setSizes">setSizes</a>( lst );
371}
372
373void <a name="f212"></a>ListViews::initFolders()
374{
375 unsigned int mcount = 1;
376
377 for ( unsigned int i = 1; i &lt; 20; i++ ) {
378 <a href="qstring.html">QString</a> str;
379 str = QString( "Folder %1" ).arg( i );
380 Folder *f = new Folder( 0, str );
381 for ( unsigned int j = 1; j &lt; 5; j++ ) {
382 <a href="qstring.html">QString</a> str2;
383 str2 = QString( "Sub Folder %1" ).arg( j );
384 Folder *f2 = new Folder( f, str2 );
385 for ( unsigned int k = 1; k &lt; 3; k++ ) {
386 <a href="qstring.html">QString</a> str3;
387 str3 = QString( "Sub Sub Folder %1" ).arg( k );
388 Folder *f3 = new Folder( f2, str3 );
389 initFolder( f3, mcount );
390 }
391 }
392 lstFolders.append( f );
393 }
394}
395
396void <a name="f213"></a>ListViews::initFolder( Folder *folder, unsigned int &amp;count )
397{
398 for ( unsigned int i = 0; i &lt; 15; i++, count++ ) {
399 <a href="qstring.html">QString</a> str;
400 str = QString( "Message %1 " ).arg( count );
401<a name="x137"></a> <a href="qdatetime.html">QDateTime</a> dt = QDateTime::<a href="qdatetime.html#currentDateTime">currentDateTime</a>();
402<a name="x136"></a> dt = dt.<a href="qdatetime.html#addSecs">addSecs</a>( 60 * count );
403 MessageHeader mh( "Trolltech &lt;info@trolltech.com&gt; ", str, dt );
404
405 <a href="qstring.html">QString</a> body;
406 body = QString( "This is the message number %1 of this application, \n"
407 "which shows how to use QListViews, QListViewItems, \n"
408 "QSplitters and so on. The code should show how easy\n"
409 "this can be done in Qt." ).arg( count );
410 Message *msg = new Message( mh, body );
411 folder-&gt;addMessage( msg );
412 }
413}
414
415void <a name="f214"></a>ListViews::setupFolders()
416{
417<a name="x142"></a> folders-&gt;<a href="qlistview.html#clear">clear</a>();
418
419 for ( Folder* f = lstFolders.first(); f; f = lstFolders.next() )
420 (void)new FolderListItem( folders, f );
421}
422
423void <a name="f215"></a>ListViews::slotRMB( <a href="qlistviewitem.html">QListViewItem</a>* Item, const <a href="qpoint.html">QPoint</a> &amp; point, int )
424{
425 if( Item )
426<a name="x159"></a> menu-&gt;<a href="qpopupmenu.html#popup">popup</a>( point );
427}
428
429
430void <a name="f216"></a>ListViews::slotFolderChanged( <a href="qlistviewitem.html">QListViewItem</a> *i )
431{
432 if ( !i )
433 return;
434 messages-&gt;<a href="qlistview.html#clear">clear</a>();
435<a name="x140"></a> message-&gt;<a href="qlabel.html#setText">setText</a>( "" );
436
437 FolderListItem *item = ( FolderListItem* )i;
438
439 for ( Message* msg = item-&gt;folder()-&gt;firstMessage(); msg;
440 msg = item-&gt;folder()-&gt;nextMessage() )
441 (void)new MessageListItem( messages, msg );
442}
443
444void <a name="f217"></a>ListViews::slotMessageChanged()
445{
446<a name="x145"></a> <a href="qlistviewitem.html">QListViewItem</a> *i = messages-&gt;<a href="qlistview.html#currentItem">currentItem</a>();
447 if ( !i )
448 return;
449
450<a name="x156"></a> if ( !i-&gt;<a href="qlistviewitem.html#isSelected">isSelected</a>() ) {
451 message-&gt;<a href="qlabel.html#setText">setText</a>( "" );
452 return;
453 }
454
455 MessageListItem *item = ( MessageListItem* )i;
456 Message *msg = item-&gt;message();
457
458 <a href="qstring.html">QString</a> text;
459 <a href="qstring.html">QString</a> tmp = msg-&gt;header().sender();
460<a name="x162"></a> tmp = tmp.<a href="qstring.html#replace">replace</a>( "&lt;", "&amp;lt;" );
461 tmp = tmp.<a href="qstring.html#replace">replace</a>( "&gt;", "&amp;gt;" );
462 text = QString( "&lt;b&gt;&lt;i&gt;From:&lt;/i&gt;&lt;/b&gt; &lt;a href=\"mailto:info@trolltech.com\"&gt;%1&lt;/a&gt;&lt;br&gt;"
463 "&lt;b&gt;&lt;i&gt;Subject:&lt;/i&gt;&lt;/b&gt; &lt;big&gt;&lt;big&gt;&lt;b&gt;%2&lt;/b&gt;&lt;/big&gt;&lt;/big&gt;&lt;br&gt;"
464 "&lt;b&gt;&lt;i&gt;Date:&lt;/i&gt;&lt;/b&gt; %3&lt;br&gt;&lt;br&gt;"
465 "%4" ).
466 arg( tmp ).arg( msg-&gt;header().subject() ).
467 arg( msg-&gt;header().datetime().toString() ).arg( msg-&gt;body() );
468
469 message-&gt;<a href="qlabel.html#setText">setText</a>( text );
470
471 msg-&gt;setState( Message::Read );
472}
473</pre>
474
475<p> <hr>
476<p> Main:
477<p> <pre>/****************************************************************************
478** $Id: listviews-example.html 2051 2007-02-21 10:04:20Z chehrlic $
479**
480** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
481**
482** This file is part of an example program for Qt. This example
483** program may be used, distributed and modified without limitation.
484**
485*****************************************************************************/
486
487#include "listviews.h"
488#include &lt;<a href="qapplication-h.html">qapplication.h</a>&gt;
489
490int main( int argc, char **argv )
491{
492 <a href="qapplication.html">QApplication</a> a( argc, argv );
493
494 ListViews listViews;
495<a name="x166"></a> listViews.<a href="qwidget.html#resize">resize</a>( 640, 480 );
496<a name="x167"></a> listViews.<a href="qwidget.html#setCaption">setCaption</a>( "Qt Example - Listview" );
497 a.<a href="qapplication.html#setMainWidget">setMainWidget</a>( &amp;listViews );
498 listViews.<a href="qwidget.html#show">show</a>();
499
500 return a.<a href="qapplication.html#exec">exec</a>();
501}
502</pre>
503
504<p>See also <a href="examples.html">Examples</a>.
505
506<!-- eof -->
507<p><address><hr><div align=center>
508<table width=100% cellspacing=0 border=0><tr>
509<td>Copyright &copy; 2007
510<a href="troll.html">Trolltech</a><td align=center><a href="trademarks.html">Trademarks</a>
511<td align=right><div align=right>Qt 3.3.8</div>
512</table></div></address></body>
513</html>
Note: See TracBrowser for help on using the repository browser.