Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |
Progress Bar
This example shows how to use a progress bar.
Header file:
/**************************************************************************** ** $Id: qt/progressbar.h 3.0.5 edited Oct 12 2001 $ ** ** 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 PROGRESSBAR_H #define PROGRESSBAR_H #include <qbuttongroup.h> #include <qtimer.h> class QRadioButton; class QPushButton; class QProgressBar; class ProgressBar : public QButtonGroup { Q_OBJECT public: ProgressBar( QWidget *parent = 0, const char *name = 0 ); protected: QRadioButton *slow, *normal, *fast; QPushButton *start, *pause, *reset; QProgressBar *progress; QTimer timer; protected slots: void slotStart(); void slotReset(); void slotTimeout(); }; #endif
Implementation:
/**************************************************************************** ** $Id: qt/progressbar.cpp 3.0.5 edited Oct 12 2001 $ ** ** 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 "progressbar.h" #include <qradiobutton.h> #include <qpushbutton.h> #include <qprogressbar.h> #include <qlayout.h> #include <qmotifstyle.h> /* * Constructor * * Creates child widgets of the ProgressBar widget */ ProgressBar::ProgressBar( QWidget *parent, const char *name ) : QButtonGroup( 0, Horizontal, "Progress Bar", parent, name ), timer() { setMargin( 10 ); QGridLayout* toplayout = new QGridLayout( layout(), 2, 2, 5); setRadioButtonExclusive( TRUE ); // insert three radiobuttons which the user can use // to set the speed of the progress and two pushbuttons // to start/pause/continue and reset the progress slow = new QRadioButton( "&Slow", this ); normal = new QRadioButton( "&Normal", this ); fast = new QRadioButton( "&Fast", this ); QVBoxLayout* vb1 = new QVBoxLayout; toplayout->addLayout( vb1, 0, 0 ); vb1->addWidget( slow ); vb1->addWidget( normal ); vb1->addWidget( fast ); // two push buttons, one for start, for for reset. start = new QPushButton( "&Start", this ); reset = new QPushButton( "&Reset", this ); QVBoxLayout* vb2 = new QVBoxLayout; toplayout->addLayout( vb2, 0, 1 ); vb2->addWidget( start ); vb2->addWidget( reset ); // Create the progressbar progress = new QProgressBar( 100, this ); // progress->setStyle( new QMotifStyle() ); toplayout->addMultiCellWidget( progress, 1, 1, 0, 1 ); // connect the clicked() SIGNALs of the pushbuttons to SLOTs connect( start, SIGNAL( clicked() ), this, SLOT( slotStart() ) ); connect( reset, SIGNAL( clicked() ), this, SLOT( slotReset() ) ); // connect the timeout() SIGNAL of the progress-timer to a SLOT connect( &timer, SIGNAL( timeout() ), this, SLOT( slotTimeout() ) ); // Let's start with normal speed... normal->setChecked( TRUE ); // some contraints start->setFixedWidth( 80 ); setMinimumWidth( 300 ); } /* * SLOT slotStart * * This SLOT is called if the user clicks start/pause/continue * button */ void ProgressBar::slotStart() { // If the progress bar is at the beginning... if ( progress->progress() == -1 ) { // ...set according to the checked speed-radiobutton // the number of steps which are needed to complete the process if ( slow->isChecked() ) progress->setTotalSteps( 10000 ); else if ( normal->isChecked() ) progress->setTotalSteps( 1000 ); else progress->setTotalSteps( 50 ); // disable the speed-radiobuttons slow->setEnabled( FALSE ); normal->setEnabled( FALSE ); fast->setEnabled( FALSE ); } // If the progress is not running... if ( !timer.isActive() ) { // ...start the timer (and so the progress) with a interval of 1 ms... timer.start( 1 ); // ...and rename the start/pause/continue button to Pause start->setText( "&Pause" ); } else { // if the prgress is running... // ...stop the timer (and so the prgress)... timer.stop(); // ...and rename the start/pause/continue button to Continue start->setText( "&Continue" ); } } /* * SLOT slotReset * * This SLOT is called when the user clicks the reset button */ void ProgressBar::slotReset() { // stop the timer and progress timer.stop(); // rename the start/pause/continue button to Start... start->setText( "&Start" ); // ...and enable this button start->setEnabled( TRUE ); // enable the speed-radiobuttons slow->setEnabled( TRUE ); normal->setEnabled( TRUE ); fast->setEnabled( TRUE ); // reset the progressbar progress->reset(); } /* * SLOT slotTimeout * * This SLOT is called each ms when the timer is * active (== progress is running) */ void ProgressBar::slotTimeout() { int p = progress->progress(); #if 1 // If the progress is complete... if ( p == progress->totalSteps() ) { // ...rename the start/pause/continue button to Start... start->setText( "&Start" ); // ...and disable it... start->setEnabled( FALSE ); // ...and return return; } #endif // If the process is not complete increase it progress->setProgress( ++p ); }
Main:
/**************************************************************************** ** $Id: qt/main.cpp 3.0.5 edited Oct 12 2001 $ ** ** 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 "progressbar.h" #include <qapplication.h> int main(int argc,char **argv) { QApplication a(argc,argv); ProgressBar progressbar; progressbar.setCaption("Qt Example - ProgressBar"); a.setMainWidget(&progressbar); progressbar.show(); return a.exec(); }
See also Examples.
Copyright © 2002 Trolltech | Trademarks | Qt version 3.0.5
|