Progress Bar
This example shows how to use a progressbar.
Header file: /****************************************************************************
** $Id: qt/examples/progressbar/progressbar.h 2.2.1 edited 2000-08-31 $
**
** 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/examples/progressbar/progressbar.cpp 2.2.1 edited 2000-08-31 $
**
** 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>
/*
* 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 );
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 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;
}
// If the process is not complete increase it
progress->setProgress( ++p );
}
Main:
/****************************************************************************
** $Id: qt/examples/progressbar/main.cpp 2.2.1 edited 2000-08-31 $
**
** 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("Example for a ProgressBar");
a.setMainWidget(&progressbar);
progressbar.show();
return a.exec();
}
Copyright © 2000 Trolltech | Trademarks
| Qt version 2.2.1
|