Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 112b0974ad288f6cd55bf971ee6026a9 > files > 786

libqt3-devel-3.0.2-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /tmp/qt-3.0-reggie-28534/qt-x11-free-3.0.2/examples/menu/menu.doc:4 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Using menus</title>
<style type="text/css"><!--
h3.fn,span.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&nbsp;Classes</font></a>
 | <a href="mainclasses.html">
<font color="#004faf">Main&nbsp;Classes</font></a>
 | <a href="annotated.html">
<font color="#004faf">Annotated</font></a>
 | <a href="groups.html">
<font color="#004faf">Grouped&nbsp;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>Using menus</h1>

   
<p> 
This example demonstrates simple use of menus (a menu bar and
pull-down menus).  Qt also supports popup menus, although this example
doesn't contain any.
<p> <hr>
<p> Header file:
<p> <pre>/****************************************************************************
** $Id:  qt/menu.h   3.0.2   edited Oct 12 12:18 $
**
** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
**
** This file is part of an example program for Qt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#ifndef MENU_H
#define MENU_H

#include &lt;<a href="qwidget-h.html">qwidget.h</a>&gt;
#include &lt;<a href="qmenubar-h.html">qmenubar.h</a>&gt;
#include &lt;<a href="qlabel-h.html">qlabel.h</a>&gt;


class MenuExample : public <a href="qwidget.html">QWidget</a>
{
    <a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a>
public:
    MenuExample( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 );

public slots:
    void open();
    void news();
    void save();
    void closeDoc();
    void undo();
    void redo();
    void normal();
    void bold();
    void underline();
    void about();
    void aboutQt();
    void printer();
    void file();
    void fax();
    void printerSetup();

protected:
    void    resizeEvent( <a href="qresizeevent.html">QResizeEvent</a> * );

signals:
    void    explain( const <a href="qstring.html">QString</a>&amp; );

private:
    <a href="qmenubar.html">QMenuBar</a> *menu;
    <a href="qlabel.html">QLabel</a>   *label;
    bool isBold;
    bool isUnderline;
    int boldID, underlineID;
};


#endif // MENU_H
</pre>

<p> <hr>
<p> Implementation:
<p> <pre>/****************************************************************************
** $Id:  qt/menu.cpp   3.0.2   edited Jan 29 19:01 $
**
** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
**
** This file is part of an example program for Qt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#include "menu.h"
#include &lt;<a href="qpopupmenu-h.html">qpopupmenu.h</a>&gt;
#include &lt;<a href="qapplication-h.html">qapplication.h</a>&gt;
#include &lt;<a href="qmessagebox-h.html">qmessagebox.h</a>&gt;
#include &lt;<a href="qpixmap-h.html">qpixmap.h</a>&gt;
#include &lt;<a href="qpainter-h.html">qpainter.h</a>&gt;

/* XPM */
static const char * p1_xpm[] = {
"16 16 3 1",
"       c None",
".      c #000000000000",
"X      c #FFFFFFFF0000",
"                ",
"                ",
"         ....   ",
"        .XXXX.  ",
" .............. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .............. ",
"                "};

/* XPM */
static const char * p2_xpm[] = {
"16 16 3 1",
"       c None",
".      c #000000000000",
"X      c #FFFFFFFFFFFF",
"                ",
"   ......       ",
"   .XXX.X.      ",
"   .XXX.XX.     ",
"   .XXX.XXX.    ",
"   .XXX.....    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .XXXXXXX.    ",
"   .........    ",
"                ",
"                "};

/* XPM */
static const char * p3_xpm[] = {
"16 16 3 1",
"       c None",
".      c #000000000000",
"X      c #FFFFFFFFFFFF",
"                ",
"                ",
"   .........    ",
"  ...........   ",
"  ........ ..   ",
"  ...........   ",
"  ...........   ",
"  ...........   ",
"  ...........   ",
"  ...XXXXX...   ",
"  ...XXXXX...   ",
"  ...XXXXX...   ",
"  ...XXXXX...   ",
"   .........    ",
"                ",
"                "};


/*
  Auxiliary class to provide fancy menu items with different
  fonts. Used for the "bold" and "underline" menu items in the options
  menu.
 */
class MyMenuItem : public <a href="qcustommenuitem.html">QCustomMenuItem</a>
{
public:
    MyMenuItem( const <a href="qstring.html">QString</a>&amp; s, const <a href="qfont.html">QFont</a>&amp; f )
        : string( s ), font( f ){};
    ~MyMenuItem(){}

    void paint( <a href="qpainter.html">QPainter</a>* p, const QColorGroup&amp; /*cg*/, bool /*act*/, bool /*enabled*/, int x, int y, int w, int h )
    {
        p-&gt;<a href="qpainter.html#setFont">setFont</a> ( font );
        p-&gt;<a href="qpainter.html#drawText">drawText</a>( x, y, w, h, AlignLeft | AlignVCenter | DontClip, string );
    }

    <a href="qsize.html">QSize</a> sizeHint()
    {
        return QFontMetrics( font ).size( AlignLeft | AlignVCenter | ShowPrefix | DontClip,  string );
    }
private:
    <a href="qstring.html">QString</a> string;
    <a href="qfont.html">QFont</a> font;
};


<a name="f338"></a>MenuExample::MenuExample( <a href="qwidget.html">QWidget</a> *parent, const char *name )
    : <a href="qwidget.html">QWidget</a>( parent, name )
{
    <a href="qpixmap.html">QPixmap</a> p1( p1_xpm );
    <a href="qpixmap.html">QPixmap</a> p2( p2_xpm );
    <a href="qpixmap.html">QPixmap</a> p3( p3_xpm );

    <a href="qpopupmenu.html">QPopupMenu</a> *print = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( print );
<a name="x1132"></a>    print-&gt;<a href="qpopupmenu.html#insertTearOffHandle">insertTearOffHandle</a>();
<a name="x1123"></a>    print-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Print to printer", this, SLOT(printer()) );
    print-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "Print to &amp;file", this, SLOT(file()) );
    print-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "Print to fa&amp;x", this, SLOT(fax()) );
<a name="x1124"></a>    print-&gt;<a href="qmenudata.html#insertSeparator">insertSeparator</a>();
    print-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "Printer &amp;Setup", this, SLOT(printerSetup()) );

    <a href="qpopupmenu.html">QPopupMenu</a> *file = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( file );
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( p1, "&amp;Open",  this, SLOT(open()), CTRL+Key_O );
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( p2, "&amp;New", this, SLOT(news()), CTRL+Key_N );
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( p3, "&amp;Save", this, SLOT(save()), CTRL+Key_S );
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Close", this, SLOT(closeDoc()), CTRL+Key_W );
    file-&gt;<a href="qmenudata.html#insertSeparator">insertSeparator</a>();
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Print", print, CTRL+Key_P );
    file-&gt;<a href="qmenudata.html#insertSeparator">insertSeparator</a>();
    file-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "E&amp;xit",  qApp, SLOT(<a href="qapplication.html#quit">quit</a>()), CTRL+Key_Q );

    <a href="qpopupmenu.html">QPopupMenu</a> *edit = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( edit );
    int undoID = edit-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Undo", this, SLOT(undo()) );
    int redoID = edit-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Redo", this, SLOT(redo()) );
<a name="x1127"></a>    edit-&gt;<a href="qmenudata.html#setItemEnabled">setItemEnabled</a>( undoID, FALSE );
    edit-&gt;<a href="qmenudata.html#setItemEnabled">setItemEnabled</a>( redoID, FALSE );

    <a href="qpopupmenu.html">QPopupMenu</a>* options = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( options );
    options-&gt;<a href="qpopupmenu.html#insertTearOffHandle">insertTearOffHandle</a>();
    options-&gt;<a href="qwidget.html#setCaption">setCaption</a>("Options");
    options-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Normal Font", this, SLOT(normal()) );
    options-&gt;<a href="qmenudata.html#insertSeparator">insertSeparator</a>();

<a name="x1135"></a>    options-&gt;<a href="qwidget.html#polish">polish</a>(); // adjust system settings
<a name="x1134"></a>    <a href="qfont.html">QFont</a> f = options-&gt;<a href="qwidget.html#font">font</a>();
<a name="x1115"></a>    f.<a href="qfont.html#setBold">setBold</a>( TRUE );
    boldID = options-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( new MyMenuItem( "Bold", f ) );
<a name="x1125"></a>    options-&gt;<a href="qmenudata.html#setAccel">setAccel</a>( CTRL+Key_B, boldID );
<a name="x1122"></a>    options-&gt;<a href="qmenudata.html#connectItem">connectItem</a>( boldID, this, SLOT(bold()) );
    f = <a href="qwidget.html#font">font</a>();
<a name="x1116"></a>    f.<a href="qfont.html#setUnderline">setUnderline</a>( TRUE );
    underlineID = options-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( new MyMenuItem( "Underline", f ) );
    options-&gt;<a href="qmenudata.html#setAccel">setAccel</a>( CTRL+Key_U, underlineID );
    options-&gt;<a href="qmenudata.html#connectItem">connectItem</a>( underlineID, this, SLOT(underline()) );

    isBold = FALSE;
    isUnderline = FALSE;
<a name="x1133"></a>    options-&gt;<a href="qpopupmenu.html#setCheckable">setCheckable</a>( TRUE );


    <a href="qpopupmenu.html">QPopupMenu</a> *help = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( help );
    help-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;About", this, SLOT(about()), CTRL+Key_H );
    help-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "About &amp;Qt", this, SLOT(aboutQt()) );

    menu = new <a href="qmenubar.html">QMenuBar</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( menu );
    menu-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;File", file );
    menu-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Edit", edit );
    menu-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Options", options );
    menu-&gt;<a href="qmenudata.html#insertSeparator">insertSeparator</a>();
    menu-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;Help", help );
<a name="x1121"></a>    menu-&gt;<a href="qmenubar.html#setSeparator">setSeparator</a>( QMenuBar::InWindowsStyle );

    label = new <a href="qlabel.html">QLabel</a>( this );
    <a href="qapplication.html#Q_CHECK_PTR">Q_CHECK_PTR</a>( label );
<a name="x1138"></a>    label-&gt;<a href="qwidget.html#setGeometry">setGeometry</a>( 20, rect().center().y()-20, width()-40, 40 );
    label-&gt;<a href="qframe.html#setFrameStyle">setFrameStyle</a>( QFrame::Box | QFrame::Raised );
<a name="x1118"></a>    label-&gt;<a href="qframe.html#setLineWidth">setLineWidth</a>( 1 );
    label-&gt;<a href="qlabel.html#setAlignment">setAlignment</a>( AlignCenter );

    <a href="qobject.html#connect">connect</a>( this,  SIGNAL(explain(const <a href="qstring.html">QString</a>&amp;)),
             label, SLOT(<a href="qlabel.html#setText">setText</a>(const <a href="qstring.html">QString</a>&amp;)) );

    <a href="qwidget.html#setMinimumSize">setMinimumSize</a>( 100, 80 );
}


void <a name="f339"></a>MenuExample::open()
{
    emit explain( "File/Open selected" );
}


void <a name="f340"></a>MenuExample::news()
{
    emit explain( "File/New selected" );
}

void <a name="f341"></a>MenuExample::save()
{
    emit explain( "File/Save selected" );
}


void <a name="f342"></a>MenuExample::closeDoc()
{
    emit explain( "File/Close selected" );
}


void <a name="f343"></a>MenuExample::undo()
{
    emit explain( "Edit/Undo selected" );
}


void <a name="f344"></a>MenuExample::redo()
{
    emit explain( "Edit/Redo selected" );
}


void <a name="f345"></a>MenuExample::normal()
{
    isBold = FALSE;
    isUnderline = FALSE;
<a name="x1126"></a>    menu-&gt;<a href="qmenudata.html#setItemChecked">setItemChecked</a>( boldID, isBold );
    menu-&gt;<a href="qmenudata.html#setItemChecked">setItemChecked</a>( underlineID, isUnderline );
    emit explain( "Options/Normal selected" );
}


void <a name="f346"></a>MenuExample::bold()
{
    isBold = !isBold;
    menu-&gt;<a href="qmenudata.html#setItemChecked">setItemChecked</a>( boldID, isBold );
    emit explain( "Options/Bold selected" );
}


void <a name="f347"></a>MenuExample::underline()
{
    isUnderline = !isUnderline;
    menu-&gt;<a href="qmenudata.html#setItemChecked">setItemChecked</a>( underlineID, isUnderline );
    emit explain( "Options/Underline selected" );
}


void <a name="f348"></a>MenuExample::about()
{
<a name="x1128"></a>    QMessageBox::<a href="qmessagebox.html#about">about</a>( this, "Qt Menu Example",
                        "This example demonstrates simple use of Qt menus.\n"
                        "You can cut and paste lines from it to your own\n"
                        "programs." );
}


void <a name="f349"></a>MenuExample::aboutQt()
{
<a name="x1129"></a>    QMessageBox::<a href="qmessagebox.html#aboutQt">aboutQt</a>( this, "Qt Menu Example" );
}


void <a name="f350"></a>MenuExample::printer()
{
    emit explain( "File/Printer/Print selected" );
}

void <a name="f351"></a>MenuExample::file()
{
    emit explain( "File/Printer/Print To File selected" );
}

void <a name="f352"></a>MenuExample::fax()
{
    emit explain( "File/Printer/Print To Fax selected" );
}

void <a name="f353"></a>MenuExample::printerSetup()
{
    emit explain( "File/Printer/Printer Setup selected" );
}


<a name="x1136"></a>void MenuExample::<a href="qwidget.html#resizeEvent">resizeEvent</a>( <a href="qresizeevent.html">QResizeEvent</a> * )
{
    label-&gt;<a href="qwidget.html#setGeometry">setGeometry</a>( 20, rect().center().y()-20, width()-40, 40 );
}


int main( int argc, char ** argv )
{
    <a href="qapplication.html">QApplication</a> a( argc, argv );
    MenuExample m;
    m.<a href="qwidget.html#setCaption">setCaption</a>("Qt Examples - Menus");
    a.<a href="qapplication.html#setMainWidget">setMainWidget</a>( &amp;m );
    m.<a href="qwidget.html#show">show</a>();
    return a.<a href="qapplication.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 &copy; 2001 
<a href="http://www.trolltech.com">Trolltech</a><td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a>
<td align=right><div align=right>Qt version 3.0.2</div>
</table></div></address></body>
</html>