diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
commit | bd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch) | |
tree | 7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/menu | |
download | qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip |
Add Qt3 development HEAD version
Diffstat (limited to 'examples/menu')
-rw-r--r-- | examples/menu/menu.cpp | 355 | ||||
-rw-r--r-- | examples/menu/menu.doc | 25 | ||||
-rw-r--r-- | examples/menu/menu.h | 59 | ||||
-rw-r--r-- | examples/menu/menu.pro | 10 |
4 files changed, 449 insertions, 0 deletions
diff --git a/examples/menu/menu.cpp b/examples/menu/menu.cpp new file mode 100644 index 0000000..eca53d9 --- /dev/null +++ b/examples/menu/menu.cpp @@ -0,0 +1,355 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. 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 <qcursor.h> +#include <qpopupmenu.h> +#include <qapplication.h> +#include <qmessagebox.h> +#include <qpixmap.h> +#include <qpainter.h> + +/* 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 QCustomMenuItem +{ +public: + MyMenuItem( const QString& s, const QFont& f ) + : string( s ), font( f ){}; + ~MyMenuItem(){} + + void paint( QPainter* p, const QColorGroup& /*cg*/, bool /*act*/, bool /*enabled*/, int x, int y, int w, int h ) + { + p->setFont ( font ); + p->drawText( x, y, w, h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, string ); + } + + QSize sizeHint() + { + return QFontMetrics( font ).size( AlignLeft | AlignVCenter | ShowPrefix | DontClip, string ); + } +private: + QString string; + QFont font; +}; + + +MenuExample::MenuExample( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + QPixmap p1( p1_xpm ); + QPixmap p2( p2_xpm ); + QPixmap p3( p3_xpm ); + QPopupMenu *print = new QPopupMenu( this ); + Q_CHECK_PTR( print ); + print->insertTearOffHandle(); + print->insertItem( "&Print to printer", this, SLOT(printer()) ); + print->insertItem( "Print to &file", this, SLOT(file()) ); + print->insertItem( "Print to fa&x", this, SLOT(fax()) ); + print->insertSeparator(); + print->insertItem( "Printer &Setup", this, SLOT(printerSetup()) ); + + QPopupMenu *file = new QPopupMenu( this ); + Q_CHECK_PTR( file ); + file->insertItem( p1, "&Open", this, SLOT(open()), CTRL+Key_O ); + file->insertItem( p2, "&New", this, SLOT(news()), CTRL+Key_N ); + file->insertItem( p3, "&Save", this, SLOT(save()), CTRL+Key_S ); + file->insertItem( "&Close", this, SLOT(closeDoc()), CTRL+Key_W ); + file->insertSeparator(); + file->insertItem( "&Print", print, CTRL+Key_P ); + file->insertSeparator(); + file->insertItem( "E&xit", qApp, SLOT(quit()), CTRL+Key_Q ); + + QPopupMenu *edit = new QPopupMenu( this ); + Q_CHECK_PTR( edit ); + int undoID = edit->insertItem( "&Undo", this, SLOT(undo()) ); + int redoID = edit->insertItem( "&Redo", this, SLOT(redo()) ); + edit->setItemEnabled( undoID, FALSE ); + edit->setItemEnabled( redoID, FALSE ); + + QPopupMenu* options = new QPopupMenu( this ); + Q_CHECK_PTR( options ); + options->insertTearOffHandle(); + options->setCaption("Options"); + options->insertItem( "&Normal Font", this, SLOT(normal()) ); + options->insertSeparator(); + + options->polish(); // adjust system settings + QFont f = options->font(); + f.setBold( TRUE ); + boldID = options->insertItem( new MyMenuItem( "Bold", f ) ); + options->setAccel( CTRL+Key_B, boldID ); + options->connectItem( boldID, this, SLOT(bold()) ); + f = font(); + f.setUnderline( TRUE ); + underlineID = options->insertItem( new MyMenuItem( "Underline", f ) ); + options->setAccel( CTRL+Key_U, underlineID ); + options->connectItem( underlineID, this, SLOT(underline()) ); + + isBold = FALSE; + isUnderline = FALSE; + options->setCheckable( TRUE ); + + + QPopupMenu *help = new QPopupMenu( this ); + Q_CHECK_PTR( help ); + help->insertItem( "&About", this, SLOT(about()), CTRL+Key_H ); + help->insertItem( "About &Qt", this, SLOT(aboutQt()) ); + + // If we used a QMainWindow we could use its built-in menuBar(). + menu = new QMenuBar( this ); + Q_CHECK_PTR( menu ); + menu->insertItem( "&File", file ); + menu->insertItem( "&Edit", edit ); + menu->insertItem( "&Options", options ); + menu->insertSeparator(); + menu->insertItem( "&Help", help ); + menu->setSeparator( QMenuBar::InWindowsStyle ); + + + QLabel *msg = new QLabel( this ); + Q_CHECK_PTR( msg ); + msg->setText( "A context menu is available.\n" + "Invoke it by right-clicking or by" + " pressing the 'context' button." ); + msg->setGeometry( 0, height() - 60, width(), 60 ); + msg->setAlignment( AlignCenter ); + + label = new QLabel( this ); + Q_CHECK_PTR( label ); + label->setGeometry( 20, rect().center().y()-20, width()-40, 40 ); + label->setFrameStyle( QFrame::Box | QFrame::Raised ); + label->setLineWidth( 1 ); + label->setAlignment( AlignCenter ); + + connect( this, SIGNAL(explain(const QString&)), + label, SLOT(setText(const QString&)) ); + + setMinimumSize( 100, 80 ); + setFocusPolicy( QWidget::ClickFocus ); +} + + +void MenuExample::contextMenuEvent( QContextMenuEvent * ) +{ + QPopupMenu* contextMenu = new QPopupMenu( this ); + Q_CHECK_PTR( contextMenu ); + QLabel *caption = new QLabel( "<font color=darkblue><u><b>" + "Context Menu</b></u></font>", this ); + caption->setAlignment( Qt::AlignCenter ); + contextMenu->insertItem( caption ); + contextMenu->insertItem( "&New", this, SLOT(news()), CTRL+Key_N ); + contextMenu->insertItem( "&Open...", this, SLOT(open()), CTRL+Key_O ); + contextMenu->insertItem( "&Save", this, SLOT(save()), CTRL+Key_S ); + QPopupMenu *submenu = new QPopupMenu( this ); + Q_CHECK_PTR( submenu ); + submenu->insertItem( "&Print to printer", this, SLOT(printer()) ); + submenu->insertItem( "Print to &file", this, SLOT(file()) ); + submenu->insertItem( "Print to fa&x", this, SLOT(fax()) ); + contextMenu->insertItem( "&Print", submenu ); + contextMenu->exec( QCursor::pos() ); + delete contextMenu; +} + + +void MenuExample::open() +{ + emit explain( "File/Open selected" ); +} + + +void MenuExample::news() +{ + emit explain( "File/New selected" ); +} + +void MenuExample::save() +{ + emit explain( "File/Save selected" ); +} + + +void MenuExample::closeDoc() +{ + emit explain( "File/Close selected" ); +} + + +void MenuExample::undo() +{ + emit explain( "Edit/Undo selected" ); +} + + +void MenuExample::redo() +{ + emit explain( "Edit/Redo selected" ); +} + + +void MenuExample::normal() +{ + isBold = FALSE; + isUnderline = FALSE; + QFont font; + label->setFont( font ); + menu->setItemChecked( boldID, isBold ); + menu->setItemChecked( underlineID, isUnderline ); + emit explain( "Options/Normal selected" ); +} + + +void MenuExample::bold() +{ + isBold = !isBold; + QFont font; + font.setBold( isBold ); + font.setUnderline( isUnderline ); + label->setFont( font ); + menu->setItemChecked( boldID, isBold ); + emit explain( "Options/Bold selected" ); +} + + +void MenuExample::underline() +{ + isUnderline = !isUnderline; + QFont font; + font.setBold( isBold ); + font.setUnderline( isUnderline ); + label->setFont( font ); + menu->setItemChecked( underlineID, isUnderline ); + emit explain( "Options/Underline selected" ); +} + + +void MenuExample::about() +{ + QMessageBox::about( 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 MenuExample::aboutQt() +{ + QMessageBox::aboutQt( this, "Qt Menu Example" ); +} + + +void MenuExample::printer() +{ + emit explain( "File/Printer/Print selected" ); +} + +void MenuExample::file() +{ + emit explain( "File/Printer/Print To File selected" ); +} + +void MenuExample::fax() +{ + emit explain( "File/Printer/Print To Fax selected" ); +} + +void MenuExample::printerSetup() +{ + emit explain( "File/Printer/Printer Setup selected" ); +} + + +void MenuExample::resizeEvent( QResizeEvent * ) +{ + label->setGeometry( 20, rect().center().y()-20, width()-40, 40 ); +} + + +int main( int argc, char ** argv ) +{ + QApplication a( argc, argv ); + MenuExample m; + m.setCaption("Qt Examples - Menus"); + a.setMainWidget( &m ); + m.show(); + return a.exec(); +} diff --git a/examples/menu/menu.doc b/examples/menu/menu.doc new file mode 100644 index 0000000..a7ed69b --- /dev/null +++ b/examples/menu/menu.doc @@ -0,0 +1,25 @@ +/* +*/ +/*! \page menu-example.html + + \ingroup examples + \title Using menus + + This example demonstrates a menu bar with pull-down menus, + sub-menus and custom menu items. It also demonstrates a pop-up + context menu. + + + <hr> + + Header file: + + \include menu/menu.h + + <hr> + + Implementation: + + \include menu/menu.cpp +*/ + diff --git a/examples/menu/menu.h b/examples/menu/menu.h new file mode 100644 index 0000000..6e7b0dc --- /dev/null +++ b/examples/menu/menu.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. 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 <qwidget.h> +#include <qmenubar.h> +#include <qlabel.h> + + +class MenuExample : public QWidget +{ + Q_OBJECT +public: + MenuExample( QWidget *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( QResizeEvent * ); + +signals: + void explain( const QString& ); + +private: + void contextMenuEvent ( QContextMenuEvent * ); + + + QMenuBar *menu; + QLabel *label; + bool isBold; + bool isUnderline; + int boldID, underlineID; +}; + + +#endif // MENU_H diff --git a/examples/menu/menu.pro b/examples/menu/menu.pro new file mode 100644 index 0000000..cc61a24 --- /dev/null +++ b/examples/menu/menu.pro @@ -0,0 +1,10 @@ +TEMPLATE = app +TARGET = menu + +CONFIG += qt warn_on release +DEPENDPATH = ../../include + +REQUIRES = large-config + +HEADERS = menu.h +SOURCES = menu.cpp |