1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include <QtGui>
#include <cmath>
#include <ctime>
//Simule une action
double action_simulation(int nb =1000)
{
double somme(0.);
for (unsigned int j=0;j<nb;++j) somme+=sqrt(static_cast<double>(j));
return somme;
}
class MyQPushButton : public QPushButton
{
public :
MyQPushButton(const QString & text, QWidget * parent = 0)
:QPushButton (text,parent)
{
resize(75, 30);
setFont(QFont("Times", 12, QFont::Bold));
};
protected:
//action lorsque le bouton est relache
void mouseReleaseEvent ( QMouseEvent * event )
{
//progress bar infinie
QProgressDialog mybar( "Wait ...", 0, 0, 0);
mybar.setWindowModality(Qt::ApplicationModal);
mybar.show();
//simule une action lente de 5s
double somme(0.);
clock_t endwait;
endwait = clock () + 5* CLOCKS_PER_SEC ;
while (clock() < endwait)
{
somme+= action_simulation() ;
}
qDebug()<<somme;
}
};
class MyQPushButton2 : public QPushButton
{
public :
//createur.
//text : text du boutton
MyQPushButton2(const QString & text, QWidget * parent = 0)
:QPushButton (text,parent)
{
resize(75, 30);
setFont(QFont("Times", 12, QFont::Bold));
};
protected :
//action lorsque le bouton est relache
void mouseReleaseEvent ( QMouseEvent * event )
{
//progress bar infinie
QProgressDialog mybar( "Wait ...", 0, 0, 0);
mybar.setWindowModality(Qt::ApplicationModal);
mybar.show();
//simule une action lente de 5s
double somme(0.);
clock_t endwait;
endwait = clock () + 5 * CLOCKS_PER_SEC ;
while (clock() < endwait)
{
QCoreApplication::processEvents();
somme+= action_simulation() ;
}
qDebug()<<somme;
}
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget w;
QVBoxLayout * vl = new QVBoxLayout;
{
//boutton : L'appliquation se bloque pendant le traitement
MyQPushButton * bouton1 = new MyQPushButton("Sans QCoreApplication::processEvents()");
//boutton : L'appliquation ne se bloque pas pendant le traitement
MyQPushButton2 * bouton2 = new MyQPushButton2("Avec QCoreApplication::processEvents()");
vl->addWidget(bouton1);
vl->addWidget(bouton2);
}
w.setLayout(vl);
w.show();
return app.exec();
} |
Partager