<!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/application/application.doc:5 -->
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > A Complete Application Window< / 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 > A Complete Application Window< / h1 >
< p >
< p > This example program looks like a complete modern application. It
has a menu bar, it has a tool bar, it has a status bar and works
like a simple text editor.
< p > There is a < a href = "simple-application.html" > walkthrough< / a > of
this example.
< p > < hr >
< p > Header file:
< p > < pre > /****************************************************************************
** $Id: qt/application.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 APPLICATION_H
#define APPLICATION_H
#include < < a href = "qmainwindow-h.html" > ntqmainwindow.h< / a > >
class TQTextEdit;
class ApplicationWindow: public < a href = "ntqmainwindow.html" > TQMainWindow< / a >
{
< a href = "metaobjects.html#Q_OBJECT" > Q_OBJECT< / a >
public:
ApplicationWindow();
~ApplicationWindow();
protected:
void closeEvent( < a href = "qcloseevent.html" > TQCloseEvent< / a > * );
private slots:
void newDoc();
void choose();
void load( const < a href = "ntqstring.html" > TQString< / a > & fileName );
void save();
void saveAs();
void print();
void about();
void aboutTQt();
private:
< a href = "ntqprinter.html" > TQPrinter< / a > *printer;
< a href = "ntqtextedit.html" > TQTextEdit< / a > *e;
< a href = "ntqstring.html" > TQString< / a > filename;
};
#endif
< / pre >
< p > < hr >
< p > Implementation:
< p > < pre > /****************************************************************************
** $Id: qt/application.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 "application.h"
#include < < a href = "qimage-h.html" > ntqimage.h< / a > >
#include < < a href = "qpixmap-h.html" > ntqpixmap.h< / a > >
#include < < a href = "qtoolbar-h.html" > ntqtoolbar.h< / a > >
#include < < a href = "qtoolbutton-h.html" > ntqtoolbutton.h< / a > >
#include < < a href = "qpopupmenu-h.html" > ntqpopupmenu.h< / a > >
#include < < a href = "qmenubar-h.html" > ntqmenubar.h< / a > >
#include < < a href = "qtextedit-h.html" > ntqtextedit.h< / a > >
#include < < a href = "qfile-h.html" > ntqfile.h< / a > >
#include < < a href = "qfiledialog-h.html" > ntqfiledialog.h< / a > >
#include < < a href = "qstatusbar-h.html" > ntqstatusbar.h< / a > >
#include < < a href = "qmessagebox-h.html" > ntqmessagebox.h< / a > >
#include < < a href = "qprinter-h.html" > ntqprinter.h< / a > >
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
#include < < a href = "qaccel-h.html" > ntqaccel.h< / a > >
#include < < a href = "qtextstream-h.html" > ntqtextstream.h< / a > >
#include < < a href = "qpainter-h.html" > ntqpainter.h< / a > >
#include < < a href = "qpaintdevicemetrics-h.html" > ntqpaintdevicemetrics.h< / a > >
#include < < a href = "qwhatsthis-h.html" > ntqwhatsthis.h< / a > >
#include < < a href = "qsimplerichtext-h.html" > ntqsimplerichtext.h< / a > >
#include "filesave.xpm"
#include "fileopen.xpm"
#include "fileprint.xpm"
< a name = "f459" > < / a > ApplicationWindow::ApplicationWindow()
: < a href = "ntqmainwindow.html" > TQMainWindow< / a > ( 0, "example application main window", WDestructiveClose | WGroupLeader )
{
printer = new < a href = "ntqprinter.html" > TQPrinter< / a > ( TQPrinter::HighResolution );
< a href = "ntqpixmap.html" > TQPixmap< / a > openIcon, saveIcon, printIcon;
< a href = "ntqtoolbar.html" > TQToolBar< / a > * fileTools = new < a href = "ntqtoolbar.html" > TQToolBar< / a > ( this, "file operations" );
< a name = "x1590" > < / a > fileTools-> < a href = "ntqtoolbar.html#setLabel" > setLabel< / a > ( "File Operations" );
openIcon = TQPixmap( fileopen );
TQToolButton * fileOpen
= new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( openIcon, "Open File", < a href = "ntqstring.html#TQString-null" > TQString::null< / a > ,
this, SLOT(choose()), fileTools, "open file" );
saveIcon = TQPixmap( filesave );
TQToolButton * fileSave
= new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( saveIcon, "Save File", TQString::null,
this, SLOT(save()), fileTools, "save file" );
printIcon = TQPixmap( fileprint );
TQToolButton * filePrint
= new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( printIcon, "Print File", TQString::null,
this, SLOT(print()), fileTools, "print file" );
(void)TQWhatsThis::whatsThisButton( fileTools );
const char * fileOpenText = "< p> < img source=\"fileopen\"> "
"Click this button to open a < em> new file< /em> .< br> "
"You can also select the < b> Open< /b> command "
"from the < b> File< /b> menu.< /p> ";
< a name = "x1591" > < / a > TQWhatsThis::< a href = "ntqwhatsthis.html#add" > add< / a > ( fileOpen, fileOpenText );
< a name = "x1558" > < / a > TQMimeSourceFactory::< a href = "qmimesourcefactory.html#defaultFactory" > defaultFactory< / a > ()-> setPixmap( "fileopen", openIcon );
const char * fileSaveText = "< p> Click this button to save the file you "
"are editing. You will be prompted for a file name.\n"
"You can also select the < b> Save< /b> command "
"from the < b> File< /b> menu.< /p> ";
TQWhatsThis::< a href = "ntqwhatsthis.html#add" > add< / a > ( fileSave, fileSaveText );
const char * filePrintText = "Click this button to print the file you "
"are editing.\n"
"You can also select the Print command "
"from the File menu.";
TQWhatsThis::< a href = "ntqwhatsthis.html#add" > add< / a > ( filePrint, filePrintText );
< a href = "ntqpopupmenu.html" > TQPopupMenu< / a > * file = new < a href = "ntqpopupmenu.html" > TQPopupMenu< / a > ( this );
< a href = "ntqmainwindow.html#menuBar" > menuBar< / a > ()-> insertItem( "& File", file );
file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "& New", this, SLOT(newDoc()), CTRL+Key_N );
int id;
id = file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( openIcon, "& Open...",
this, SLOT(choose()), CTRL+Key_O );
< a name = "x1554" > < / a > file-> < a href = "ntqmenudata.html#setWhatsThis" > setWhatsThis< / a > ( id, fileOpenText );
id = file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( saveIcon, "& Save",
this, SLOT(save()), CTRL+Key_S );
file-> < a href = "ntqmenudata.html#setWhatsThis" > setWhatsThis< / a > ( id, fileSaveText );
id = file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "Save & As...", this, SLOT(saveAs()) );
file-> < a href = "ntqmenudata.html#setWhatsThis" > setWhatsThis< / a > ( id, fileSaveText );
file-> < a href = "ntqmenudata.html#insertSeparator" > insertSeparator< / a > ();
id = file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( printIcon, "& Print...",
this, SLOT(print()), CTRL+Key_P );
file-> < a href = "ntqmenudata.html#setWhatsThis" > setWhatsThis< / a > ( id, filePrintText );
file-> < a href = "ntqmenudata.html#insertSeparator" > insertSeparator< / a > ();
file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "& Close", this, SLOT(< a href = "ntqwidget.html#close" > close< / a > ()), CTRL+Key_W );
< a name = "x1544" > < / a > file-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "& Quit", qApp, SLOT( < a href = "ntqapplication.html#closeAllWindows" > closeAllWindows< / a > () ), CTRL+Key_Q );
< a href = "ntqmainwindow.html#menuBar" > menuBar< / a > ()-> insertSeparator();
< a href = "ntqpopupmenu.html" > TQPopupMenu< / a > * help = new < a href = "ntqpopupmenu.html" > TQPopupMenu< / a > ( this );
< a href = "ntqmainwindow.html#menuBar" > menuBar< / a > ()-> insertItem( "& Help", help );
help-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "& About", this, SLOT(about()), Key_F1 );
help-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "About & TQt", this, SLOT(aboutTQt()) );
help-> < a href = "ntqmenudata.html#insertSeparator" > insertSeparator< / a > ();
help-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( "What's & This", this, SLOT(< a href = "ntqmainwindow.html#whatsThis" > whatsThis< / a > ()), SHIFT+Key_F1 );
e = new < a href = "ntqtextedit.html" > TQTextEdit< / a > ( this, "editor" );
e-> < a href = "ntqwidget.html#setFocus" > setFocus< / a > ();
< a href = "ntqmainwindow.html#setCentralWidget" > setCentralWidget< / a > ( e );
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Ready", 2000 );
< a href = "ntqwidget.html#resize" > resize< / a > ( 450, 600 );
}
ApplicationWindow::~ApplicationWindow()
{
delete printer;
}
void < a name = "f460" > < / a > ApplicationWindow::newDoc()
{
ApplicationWindow *ed = new ApplicationWindow;
ed-> < a href = "ntqwidget.html#setCaption" > setCaption< / a > ("TQt Example - Application");
ed-> < a href = "ntqwidget.html#show" > show< / a > ();
}
void < a name = "f461" > < / a > ApplicationWindow::choose()
{
< a name = "x1549" > < / a > < a href = "ntqstring.html" > TQString< / a > fn = TQFileDialog::< a href = "ntqfiledialog.html#getOpenFileName" > getOpenFileName< / a > ( TQString::null, TQString::null,
this);
if ( !fn.< a href = "ntqstring.html#isEmpty" > isEmpty< / a > () )
load( fn );
else
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Loading aborted", 2000 );
}
void < a name = "f462" > < / a > ApplicationWindow::load( const < a href = "ntqstring.html" > TQString< / a > & fileName )
{
< a href = "ntqfile.html" > TQFile< / a > f( fileName );
< a name = "x1548" > < / a > if ( !f.< a href = "ntqfile.html#open" > open< / a > ( < a href = "ntqfile.html#open" > IO_ReadOnly< / a > ) )
return;
< a href = "ntqtextstream.html" > TQTextStream< / a > ts( & f );
< a name = "x1589" > < / a > < a name = "x1586" > < / a > e-> < a href = "ntqtextedit.html#setText" > setText< / a > ( ts.< a href = "ntqtextstream.html#read" > read< / a > () );
< a name = "x1585" > < / a > e-> < a href = "ntqtextedit.html#setModified" > setModified< / a > ( FALSE );
< a href = "ntqwidget.html#setCaption" > setCaption< / a > ( fileName );
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Loaded document " + fileName, 2000 );
}
void < a name = "f463" > < / a > ApplicationWindow::save()
{
if ( filename.isEmpty() ) {
saveAs();
return;
}
< a name = "x1588" > < / a > < a href = "ntqstring.html" > TQString< / a > text = e-> < a href = "ntqtextedit.html#text" > text< / a > ();
< a href = "ntqfile.html" > TQFile< / a > f( filename );
if ( !f.< a href = "ntqfile.html#open" > open< / a > ( < a href = "ntqfile.html#open" > IO_WriteOnly< / a > ) ) {
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( TQString("Could not write to %1").arg(filename),
2000 );
return;
}
< a href = "ntqtextstream.html" > TQTextStream< / a > t( & f );
t < < text;
f.< a href = "ntqfile.html#close" > close< / a > ();
e-> < a href = "ntqtextedit.html#setModified" > setModified< / a > ( FALSE );
< a href = "ntqwidget.html#setCaption" > setCaption< / a > ( filename );
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( TQString( "File %1 saved" ).arg( filename ), 2000 );
}
void < a name = "f464" > < / a > ApplicationWindow::saveAs()
{
< a name = "x1550" > < / a > < a href = "ntqstring.html" > TQString< / a > fn = TQFileDialog::< a href = "ntqfiledialog.html#getSaveFileName" > getSaveFileName< / a > ( TQString::null, TQString::null,
this );
if ( !fn.< a href = "ntqstring.html#isEmpty" > isEmpty< / a > () ) {
filename = fn;
save();
} else {
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Saving aborted", 2000 );
}
}
void < a name = "f465" > < / a > ApplicationWindow::print()
{
< a name = "x1568" > < / a > printer-> < a href = "ntqprinter.html#setFullPage" > setFullPage< / a > ( TRUE );
< a name = "x1569" > < / a > if ( printer-> < a href = "ntqprinter.html#setup" > setup< / a > (this) ) { // printer dialog
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Printing..." );
< a href = "ntqpainter.html" > TQPainter< / a > p;
if( !p.< a href = "ntqpainter.html#begin" > begin< / a > ( printer ) ) { // paint on printer
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Printing aborted", 2000 );
return;
}
< a name = "x1563" > < / a > < a href = "ntqpaintdevicemetrics.html" > TQPaintDeviceMetrics< / a > metrics( p.< a href = "ntqpainter.html#device" > device< / a > () );
< a name = "x1560" > < / a > int dpiy = metrics.< a href = "ntqpaintdevicemetrics.html#logicalDpiY" > logicalDpiY< / a > ();
int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins
< a name = "x1561" > < / a > < a name = "x1559" > < / a > < a href = "ntqrect.html" > TQRect< / a > view( margin, margin, metrics.< a href = "ntqpaintdevicemetrics.html#width" > width< / a > () - 2*margin, metrics.< a href = "ntqpaintdevicemetrics.html#height" > height< / a > () - 2*margin );
< a name = "x1581" > < / a > < a href = "ntqsimplerichtext.html" > TQSimpleRichText< / a > richText( TQStyleSheet::< a href = "ntqstylesheet.html#convertFromPlainText" > convertFromPlainText< / a > (e-> < a href = "ntqtextedit.html#text" > text< / a > ()),
TQFont(),
< a name = "x1582" > < / a > e-> < a href = "ntqtextedit.html#context" > context< / a > (),
< a name = "x1587" > < / a > e-> < a href = "ntqtextedit.html#styleSheet" > styleSheet< / a > (),
< a name = "x1584" > < / a > e-> < a href = "ntqtextedit.html#mimeSourceFactory" > mimeSourceFactory< / a > (),
view.< a href = "ntqrect.html#height" > height< / a > () );
< a name = "x1578" > < / a > richText.< a href = "ntqsimplerichtext.html#setWidth" > setWidth< / a > ( & p, view.< a href = "ntqrect.html#width" > width< / a > () );
int page = 1;
do {
< a name = "x1576" > < / a > richText.< a href = "ntqsimplerichtext.html#draw" > draw< / a > ( & p, margin, margin, view, colorGroup() );
< a name = "x1572" > < / a > view.< a href = "ntqrect.html#moveBy" > moveBy< / a > ( 0, view.< a href = "ntqrect.html#height" > height< / a > () );
< a name = "x1566" > < / a > p.< a href = "ntqpainter.html#translate" > translate< / a > ( 0 , -view.< a href = "ntqrect.html#height" > height< / a > () );
< a name = "x1580" > < / a > < a name = "x1573" > < / a > < a name = "x1565" > < / a > p.< a href = "ntqpainter.html#drawText" > drawText< / a > ( view.< a href = "ntqrect.html#right" > right< / a > () - p.< a href = "ntqpainter.html#fontMetrics" > fontMetrics< / a > ().width( TQString::< a href = "ntqstring.html#number" > number< / a > ( page ) ),
< a name = "x1570" > < / a > view.< a href = "ntqrect.html#bottom" > bottom< / a > () + p.< a href = "ntqpainter.html#fontMetrics" > fontMetrics< / a > ().ascent() + 5, TQString::number( page ) );
< a name = "x1577" > < / a > if ( view.< a href = "ntqrect.html#top" > top< / a > () - margin > = richText.< a href = "ntqsimplerichtext.html#height" > height< / a > () )
break;
< a name = "x1567" > < / a > printer-> < a href = "ntqprinter.html#newPage" > newPage< / a > ();
page++;
} while (TRUE);
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Printing completed", 2000 );
} else {
< a href = "ntqmainwindow.html#statusBar" > statusBar< / a > ()-> message( "Printing aborted", 2000 );
}
}
< a name = "x1592" > < / a > void ApplicationWindow::< a href = "ntqwidget.html#closeEvent" > closeEvent< / a > ( < a href = "qcloseevent.html" > TQCloseEvent< / a > * ce )
{
< a name = "x1583" > < / a > if ( !e-> < a href = "ntqtextedit.html#isModified" > isModified< / a > () ) {
< a name = "x1545" > < / a > ce-> < a href = "qcloseevent.html#accept" > accept< / a > ();
return;
}
< a name = "x1557" > < / a > switch( TQMessageBox::< a href = "ntqmessagebox.html#information" > information< / a > ( this, "TQt Application Example",
"Do you want to save the changes"
" to the document?",
"Yes", "No", "Cancel",
0, 1 ) ) {
case 0:
save();
ce-> < a href = "qcloseevent.html#accept" > accept< / a > ();
break;
case 1:
ce-> < a href = "qcloseevent.html#accept" > accept< / a > ();
break;
case 2:
default: // just for sanity
< a name = "x1546" > < / a > ce-> < a href = "qcloseevent.html#ignore" > ignore< / a > ();
break;
}
}
void < a name = "f466" > < / a > ApplicationWindow::about()
{
< a name = "x1555" > < / a > TQMessageBox::< a href = "ntqmessagebox.html#about" > about< / a > ( this, "TQt Application Example",
"This example demonstrates simple use of "
"TQMainWindow,\nTQMenuBar and TQToolBar.");
}
void < a name = "f467" > < / a > ApplicationWindow::aboutTQt()
{
< a name = "x1556" > < / a > TQMessageBox::< a href = "ntqmessagebox.html#aboutTQt" > aboutTQt< / a > ( this, "TQt Application Example" );
}
< / 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 < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
#include "application.h"
int main( int argc, char ** argv ) {
< a href = "ntqapplication.html" > TQApplication< / a > a( argc, argv );
ApplicationWindow *mw = new ApplicationWindow();
mw-> < a href = "ntqwidget.html#setCaption" > setCaption< / a > ( "TQt Example - Application" );
< a name = "x1598" > < / a > mw-> < a href = "ntqwidget.html#show" > show< / a > ();
< a name = "x1599" > < / a > a.< a href = "ntqobject.html#connect" > connect< / a > ( & a, SIGNAL(< a href = "ntqapplication.html#lastWindowClosed" > lastWindowClosed< / a > ()), & a, SLOT(< a href = "ntqapplication.html#quit" > quit< / a > ()) );
return a.< a href = "ntqapplication.html#exec" > exec< / a > ();
}
< / pre >
< p > See also < a href = "examples.html" > 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 >