Qt logo

Widgets Demo


This example creates a window with many Qt widgets and two custom example widgets; aclock and dclock. It also shows how to connect widget signals to internal slots.
/****************************************************************************
** $Id: widgets.cpp,v 2.46 1998/07/08 13:22:45 aavit Exp $
**
** Copyright (C) 1992-1998 Troll Tech 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 <qdialog.h>
#include <qmessagebox.h>
#include <qpixmap.h>
#include <qmovie.h>
#include <qlayout.h>
#include <qapplication.h>
#include <qkeycode.h>

// Standard Qt widgets

#include <qmenubar.h>
#include <qpopupmenu.h>
#include <qbuttongroup.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qframe.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlcdnumber.h>
#include <qmultilinedit.h>
#include <qlineedit.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qslider.h>
#include <qtooltip.h>
#include <qspinbox.h>

// Some sample widgets

#include "../aclock/aclock.h"
#include "../dclock/dclock.h"

#define MOVIEFILENAME "trolltech.gif"

//
// WidgetView contains lots of Qt widgets.
//

class WidgetView : public QWidget
{
    Q_OBJECT
public:
    WidgetView( QWidget *parent=0, const char *name=0 );

public slots:
    void        setStatus(const char*);

private slots:
    void        button1Clicked();
    void        checkBoxClicked( int );
    void        radioButtonClicked( int );
    void        sliderValueChanged( int );
    void        listBoxItemSelected( int );
    void        comboBoxItemActivated( int );
    void        edComboBoxItemActivated( const char * );
    void        lineEditTextChanged( const char * );
    void        movieStatus( int );
    void        movieUpdate( const QRect& );
    void        spinBoxValueChanged( const char * );

private:
    bool        eventFilter( QObject *, QEvent * );
    QLabel     *msg;
    QCheckBox  *cb[3];
    QLabel     *movielabel;
    QMovie      movie;
};

//
// Construct the WidgetView with buttons
//

WidgetView::WidgetView( QWidget *parent, const char *name )
    : QWidget( parent, name )
{
    QColor col;

  // Set the window caption/title

    setCaption( "Qt Widgets Demo Application" );

  // Install an application-global event filter

    qApp->installEventFilter( this );

  // Create a layout to position the widgets

    QVBoxLayout *topLayout = new QVBoxLayout( this, 10 );

  // Create a grid layout to hold most of the widgets

    QGridLayout *grid = new QGridLayout( 6, 3 );
 // This layout will get all of the stretch
    topLayout->addLayout( grid, 10 );

  // Create a menubar
    QMenuBar *menubar = new QMenuBar( this );
    menubar->setSeparator( QMenuBar::InWindowsStyle );
  // Create an easter egg
    QToolTip::add( menubar, QRect( 0, 0, 2, 2 ), "easter egg" );

    QPopupMenu* popup;
    popup = new QPopupMenu;
    int id;
    id = popup->insertItem( "&New" );
    popup->setItemEnabled( id, FALSE );
    id = popup->insertItem( "&Open" );
    popup->setItemEnabled( id, FALSE );
    popup->insertSeparator();
    popup->insertItem( "&Quit", qApp, SLOT(quit()), CTRL+Key_Q );

    menubar->insertItem( "&File", popup );

    // Must tell the layout about a menubar in a widget
    topLayout->setMenuBar( menubar );

  // Create an analog and a digital clock

    AnalogClock  *aclock = new AnalogClock( this );
    DigitalClock *dclock = new DigitalClock( this );
    dclock->setMaximumWidth(200);
    grid->addWidget( aclock, 0, 2 );
    grid->addWidget( dclock, 1, 2 );

  // Give the dclock widget a blue palette

    col.setRgb( 0xaa, 0xbe, 0xff );
    dclock->setPalette( QPalette( col ) );

  // make tool tips for both of them

    QToolTip::add( aclock, "custom widget: analog clock" );
    QToolTip::add( dclock, "custom widget: digital clock" );

  // Create a push button.

    QPushButton *pb;
    pb = new QPushButton( this, "button1" );    // create button 1
    pb->setText( "Push button 1" );
    pb->setFixedHeight( pb->sizeHint().height() );
    grid->addWidget( pb, 0, 0, AlignVCenter );
    connect( pb, SIGNAL(clicked()), SLOT(button1Clicked()) );
    QToolTip::add( pb, "push button 1" );
    QPixmap pm;
    bool pix = pm.load("qt.bmp");               // load pixmap for button 2
    if ( !pix ) {
        QMessageBox::information( 0, "Qt Widgets Example",
                                  "Could not load the file \"qt.bmp\", which\n"
                                  "contains an icon used...\n\n"
                                  "The text \"line 42\" will be substituted.",
                                  QMessageBox::Ok + QMessageBox::Default );
    }

    // Create a label containing a QMovie

    movielabel = new QLabel( this, "label0" );
    movie = QMovie( MOVIEFILENAME );
    movie.connectStatus(this, SLOT(movieStatus(int)));
    movie.connectUpdate(this, SLOT(movieUpdate(const QRect&)));
    movielabel->setFrameStyle( QFrame::Box | QFrame::Plain );
    movielabel->setMovie( movie );
    movielabel->setMargin( 0 );
    movielabel->setFixedSize( 128+movielabel->frameWidth()*2,
                              64+movielabel->frameWidth()*2 );
    grid->addWidget( movielabel, 0, 1, AlignCenter );
    QToolTip::add( movielabel, "movie" );

  // Create a group of check boxes

    QButtonGroup *bg = new QButtonGroup( this, "checkGroup" );
    bg->setTitle( "Check Boxes" );
    grid->addWidget( bg, 1, 0 );

  // Create a layout for the check boxes
    QVBoxLayout *vbox = new QVBoxLayout(bg, 10);

    vbox->addSpacing( bg->fontMetrics().height() );

    cb[0] = new QCheckBox( bg );
    cb[0]->setText( "Read" );
    vbox->addWidget( cb[0] );
    cb[0]->setMinimumSize( cb[0]->sizeHint() );
    cb[1] = new QCheckBox( bg );
    cb[1]->setText( "Write" );
    vbox->addWidget( cb[1] );
    cb[1]->setMinimumSize( cb[1]->sizeHint() );
    cb[2] = new QCheckBox( bg );
    cb[2]->setText( "Execute" );
    cb[2]->setMinimumSize( cb[2]->sizeHint() );
    vbox->addWidget( cb[2] );
    bg->setMinimumSize( bg->childrenRect().size() );
    vbox->activate();

    connect( bg, SIGNAL(clicked(int)), SLOT(checkBoxClicked(int)) );

    QToolTip::add( cb[0], "check box 1" );
    QToolTip::add( cb[1], "check box 2" );
    QToolTip::add( cb[2], "check box 3" );

  // Create a group of radio buttons

    QRadioButton *rb;
    bg = new QButtonGroup( this, "radioGroup" );
    bg->setTitle( "Radio buttons" );

    grid->addWidget( bg, 1, 1 );

  // Create a layout for the radio buttons
    vbox = new QVBoxLayout(bg, 10);

    vbox->addSpacing( bg->fontMetrics().height() );
    rb = new QRadioButton( bg );
    rb->setText( "&AM" );
    rb->setChecked( TRUE );
    vbox->addWidget(rb);
    rb->setMinimumSize( rb->sizeHint() );
    QToolTip::add( rb, "radio button 1" );
    rb = new QRadioButton( bg );
    rb->setText( "&FM" );
    vbox->addWidget(rb);
    rb->setMinimumSize( rb->sizeHint() );
    QToolTip::add( rb, "radio button 2" );
    rb = new QRadioButton( bg );
    rb->setText( "&Short Wave" );
    vbox->addWidget(rb);
    rb->setMinimumSize( rb->sizeHint() );
    vbox->activate();

    connect( bg, SIGNAL(clicked(int)), SLOT(radioButtonClicked(int)) );
    QToolTip::add( rb, "radio button 3" );

  // Create a list box

    QListBox *lb = new QListBox( this, "listBox" );
    for ( int i=0; i<100; i++ ) {               // fill list box
        QString str;
        str.sprintf( "line %d", i );
        if ( i == 42 && pix )
            lb->insertItem( pm );
        else
            lb->insertItem( str );
    }
    grid->addMultiCellWidget( lb, 2, 4, 0, 0 );
    connect( lb, SIGNAL(selected(int)), SLOT(listBoxItemSelected(int)) );
    QToolTip::add( lb, "list box" );

    vbox = new QVBoxLayout(8);
    grid->addLayout( vbox, 2, 1 );

  // Create a slider

    QSlider *sb = new QSlider( 0, 300, 1, 100, QSlider::Horizontal,
                               this, "Slider" );
    sb->setTickmarks( QSlider::Below );
    sb->setTickInterval( 10 );
    sb->setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">setFocusPolicy( QWidget::Taby">