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