<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/espenr/tmp/qt - 3.3.8 - espenr - 2499/qt - x11 - free - 3.3.8/examples/table/statistics/statistics.doc:1 -->
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > Table Example< / title >
< style type = "text/css" > < ! - -
fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; }
-->< / style >
< / head >
< body >
< table border = "0" cellpadding = "0" cellspacing = "0" width = "100%" >
< tr bgcolor = "#E5E5E5" >
< td valign = center >
< a href = "index.html" >
< font color = "#004faf" > Home< / font > < / a >
| < a href = "classes.html" >
< font color = "#004faf" > All Classes< / font > < / a >
| < a href = "mainclasses.html" >
< font color = "#004faf" > Main Classes< / font > < / a >
| < a href = "annotated.html" >
< font color = "#004faf" > Annotated< / font > < / a >
| < a href = "groups.html" >
< font color = "#004faf" > Grouped Classes< / font > < / a >
| < a href = "functions.html" >
< font color = "#004faf" > Functions< / font > < / a >
< / td >
< td align = "right" valign = "center" > < img src = "logo32.png" align = "right" width = "64" height = "32" border = "0" > < / td > < / tr > < / table > < h1 align = center > Table Example< / h1 >
< p >
Another < a href = "ntqtable.html" > TQTable< / a > example.
< p > < hr >
< p > Header file:
< p > < pre > /****************************************************************************
** $Id: qt/statistics.h 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#ifndef STATISTICS_H
#define STATISTICS_H
#include < < a href = "qtable-h.html" > ntqtable.h< / a > >
#include < < a href = "qcombobox-h.html" > ntqcombobox.h< / a > >
class TableItem : public < a href = "qtableitem.html" > TQTableItem< / a >
{
public:
TableItem( < a href = "ntqtable.html" > TQTable< / a > *t, EditType et, const < a href = "ntqstring.html" > TQString< / a > & txt ) : < a href = "qtableitem.html" > TQTableItem< / a > ( t, et, txt ) {}
void paint( < a href = "ntqpainter.html" > TQPainter< / a > *p, const < a href = "qcolorgroup.html" > TQColorGroup< / a > & cg, const < a href = "ntqrect.html" > TQRect< / a > & cr, bool selected );
};
class ComboItem : public < a href = "qtableitem.html" > TQTableItem< / a >
{
public:
ComboItem( < a href = "ntqtable.html" > TQTable< / a > *t, EditType et );
< a href = "ntqwidget.html" > TQWidget< / a > *createEditor() const;
void setContentFromEditor( < a href = "ntqwidget.html" > TQWidget< / a > *w );
void setText( const < a href = "ntqstring.html" > TQString< / a > & s );
private:
< a href = "ntqcombobox.html" > TQComboBox< / a > *cb;
};
class Table : public < a href = "ntqtable.html" > TQTable< / a >
{
< a href = "metaobjects.html#TQ_OBJECT" > TQ_OBJECT< / a >
public:
Table();
void sortColumn( int col, bool ascending, bool wholeRows );
private slots:
void recalcSum( int row, int col );
private:
void initTable();
};
#endif
< / pre >
< p > < hr >
< p > Implementation:
< p > < pre > /****************************************************************************
** $Id: qt/statistics.cpp 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "statistics.h"
#include < < a href = "qdir-h.html" > ntqdir.h< / a > >
#include < < a href = "qstringlist-h.html" > ntqstringlist.h< / a > >
#include < < a href = "qheader-h.html" > ntqheader.h< / a > >
#include < < a href = "qcombobox-h.html" > ntqcombobox.h< / a > >
#include < stdlib.h>
const char* dirs[] = {
"kernel",
"tools",
"widgets",
"dialogs",
"xml",
"table",
"network",
"opengl",
"canvas",
0
};
< a name = "f578" > < / a > Table::Table()
: < a href = "ntqtable.html" > TQTable< / a > ( 10, 100, 0, "table" )
{
< a href = "ntqtable.html#setSorting" > setSorting< / a > ( TRUE );
< a href = "ntqtable.html#horizontalHeader" > horizontalHeader< / a > ()-> setLabel( 0, tr( "File" ) );
< a href = "ntqtable.html#horizontalHeader" > horizontalHeader< / a > ()-> setLabel( 1, tr( "Size (bytes)" ) );
< a href = "ntqtable.html#horizontalHeader" > horizontalHeader< / a > ()-> setLabel( 2, tr( "Use in Sum" ) );
initTable();
< a href = "ntqtable.html#adjustColumn" > adjustColumn< / a > ( 0 );
// if the user edited something we might need to recalculate the sum
< a href = "ntqobject.html#connect" > connect< / a > ( this, TQ_SIGNAL( < a href = "ntqtable.html#valueChanged" > valueChanged< / a > ( int, int ) ),
this, TQ_SLOT( recalcSum( int, int ) ) );
}
void < a name = "f579" > < / a > Table::initTable()
{
// read all the TQt source and header files into a list
< a href = "ntqstringlist.html" > TQStringList< / a > all;
int i = 0;
< a href = "ntqstring.html" > TQString< / a > srcdir( "../../../src/" );
while ( dirs[ i ] ) {
< a href = "ntqdir.html" > TQDir< / a > dir( srcdir + dirs[ i ] );
< a name = "x2780" > < / a > < a href = "ntqstringlist.html" > TQStringList< / a > lst = dir.< a href = "ntqdir.html#entryList" > entryList< / a > ( "*.cpp; *.h" );
< a name = "x2791" > < / a > < a name = "x2789" > < / a > for ( TQStringList::Iterator it = lst.< a href = "ntqvaluelist.html#begin" > begin< / a > (); it != lst.< a href = "ntqvaluelist.html#end" > end< / a > (); ++it ) {
if ( ( *it ).contains( "moc" ) )
continue;
all < < (TQString( dirs[ i ] ) + "/" + *it);
}
++i;
}
// set the number of rows we'll need for the table
< a name = "x2790" > < / a > < a href = "ntqtable.html#setNumRows" > setNumRows< / a > ( all.< a href = "ntqvaluelist.html#count" > count< / a > () + 1 );
i = 0;
int sum = 0;
// insert the data into the table
for ( TQStringList::Iterator it = all.< a href = "ntqvaluelist.html#begin" > begin< / a > (); it != all.< a href = "ntqvaluelist.html#end" > end< / a > (); ++it ) {
< a href = "ntqtable.html#setText" > setText< / a > ( i, 0, *it );
< a href = "ntqfile.html" > TQFile< / a > f( srcdir + *it );
< a name = "x2781" > < / a > < a href = "ntqtable.html#setText" > setText< / a > ( i, 1, TQString::number( (ulong)f.< a href = "ntqfile.html#size" > size< / a > () ) );
ComboItem *ci = new ComboItem( this, TQTableItem::WhenCurrent );
< a href = "ntqtable.html#setItem" > setItem< / a > ( i++, 2, ci );
sum += f.< a href = "ntqfile.html#size" > size< / a > ();
}
// last row should show the sum
TableItem *i1 = new TableItem( this, TQTableItem::Never, tr( "Sum" ) );
< a href = "ntqtable.html#setItem" > setItem< / a > ( i, 0, i1 );
TableItem *i2 = new TableItem( this, TQTableItem::Never, TQString::number( sum ) );
< a href = "ntqtable.html#setItem" > setItem< / a > ( i, 1, i2 );
}
void < a name = "f580" > < / a > Table::recalcSum( int, int col )
{
// only recalc if a value in the second or third column changed
if ( col < 1 || col > 2 )
return;
// recalc sum
int sum = 0;
for ( int i = 0; i < numRows() - 1; ++i ) {
if ( < a href = "qtableitem.html#text" > text< / a > ( i, 2 ) == "No" )
continue;
sum += < a href = "qtableitem.html#text" > text< / a > ( i, 1 ).toInt();
}
// insert calculated data
TableItem *i1 = new TableItem( this, TQTableItem::Never, tr( "Sum" ) );
setItem( numRows() - 1, 0, i1 );
TableItem *i2 = new TableItem( this, TQTableItem::Never, TQString::number( sum ) );
setItem( numRows() - 1, 1, i2 );
}
< a name = "x2784" > < / a > void Table::< a href = "ntqtable.html#sortColumn" > sortColumn< / a > ( int col, bool ascending, bool /*wholeRows*/ )
{
// sum row should not be sorted, so get rid of it for now
clearCell( numRows() - 1, 0 );
clearCell( numRows() - 1, 1 );
// do sort
TQTable::< a href = "ntqtable.html#sortColumn" > sortColumn< / a > ( col, ascending, TRUE );
// re-insert sum row
recalcSum( 0, 1 );
}
< a name = "x2786" > < / a > void TableItem::< a href = "qtableitem.html#paint" > paint< / a > ( < a href = "ntqpainter.html" > TQPainter< / a > *p, const < a href = "qcolorgroup.html" > TQColorGroup< / a > & cg, const < a href = "ntqrect.html" > TQRect< / a > & cr, bool selected )
{
< a href = "qcolorgroup.html" > TQColorGroup< / a > g( cg );
// last row is the sum row - we want to make it more visible by
// using a red background
if ( < a href = "qtableitem.html#row" > row< / a > () == < a href = "qtableitem.html#table" > table< / a > ()-> numRows() - 1 )
< a name = "x2779" > < / a > g.< a href = "qcolorgroup.html#setColor" > setColor< / a > ( TQColorGroup::Base, red );
TQTableItem::< a href = "qtableitem.html#paint" > paint< / a > ( p, g, cr, selected );
}
< a name = "f577" > < / a > ComboItem::ComboItem( < a href = "ntqtable.html" > TQTable< / a > *t, EditType et )
: < a href = "qtableitem.html" > TQTableItem< / a > ( t, et, "Yes" ), cb( 0 )
{
// we do not want this item to be replaced
< a href = "qtableitem.html#setReplaceable" > setReplaceable< / a > ( FALSE );
}
< a name = "x2785" > < / a > TQWidget *ComboItem::< a href = "qtableitem.html#createEditor" > createEditor< / a > () const
{
// create an editor - a combobox in our case
( (ComboItem*)this )-> cb = new < a href = "ntqcombobox.html" > TQComboBox< / a > ( < a href = "qtableitem.html#table" > table< / a > ()-> viewport() );
TQObject::< a href = "ntqobject.html#connect" > connect< / a > ( cb, TQ_SIGNAL( activated( int ) ), table(), TQ_SLOT( doValueChanged() ) );
cb-> insertItem( "Yes" );
cb-> insertItem( "No" );
// and initialize it
cb-> setCurrentItem( < a href = "qtableitem.html#text" > text< / a > () == "No" ? 1 : 0 );
return cb;
}
< a name = "x2787" > < / a > void ComboItem::< a href = "qtableitem.html#setContentFromEditor" > setContentFromEditor< / a > ( < a href = "ntqwidget.html" > TQWidget< / a > *w )
{
// the user changed the value of the combobox, so synchronize the
// value of the item (its text), with the value of the combobox
< a name = "x2783" > < / a > if ( w-> < a href = "ntqobject.html#inherits" > inherits< / a > ( "TQComboBox" ) )
< a href = "qtableitem.html#setText" > setText< / a > ( ( (TQComboBox*)w )-> currentText() );
else
TQTableItem::< a href = "qtableitem.html#setContentFromEditor" > setContentFromEditor< / a > ( w );
}
< a name = "x2788" > < / a > void ComboItem::< a href = "qtableitem.html#setText" > setText< / a > ( const < a href = "ntqstring.html" > TQString< / a > & s )
{
if ( cb ) {
// initialize the combobox from the text
if ( s == "No" )
cb-> setCurrentItem( 1 );
else
cb-> setCurrentItem( 0 );
}
TQTableItem::< a href = "qtableitem.html#setText" > setText< / a > ( s );
}
< / pre >
< p > < hr >
< p > Main:
< p > < pre > /****************************************************************************
** $Id: qt/main.cpp 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "statistics.h"
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
int main( int argc, char **argv )
{
< a href = "ntqapplication.html" > TQApplication< / a > a(argc,argv);
Table t;
a.< a href = "ntqapplication.html#setMainWidget" > setMainWidget< / a > ( & t );
t.< a href = "ntqwidget.html#show" > show< / a > ();
return a.< a href = "ntqapplication.html#exec" > exec< / a > ();
}
< / pre >
< p > See also < a href = "table-examples.html" > Table Examples< / a > .
<!-- eof -->
< p > < address > < hr > < div align = center >
< table width = 100% cellspacing = 0 border = 0 > < tr >
< td > Copyright © 2007
< a href = "troll.html" > Trolltech< / a > < td align = center > < a href = "trademarks.html" > Trademarks< / a >
< td align = right > < div align = right > TQt 3.3.8< / div >
< / table > < / div > < / address > < / body >
< / html >