2 votes

Pourquoi QProgressDialog est-il affiché sans appel explicite à `exec()` ou `show()`?

J'ai le code suivant

#include "dialog.h"

#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QProgressDialog w;
    //w.show();
    return a.exec();
}

L'exécution de ce code montre une interface utilisateur QProgressDialog.

enter image description here

J'aimerais avoir une explication sur le fait que mon QProgressDialog s'affiche sans avoir d'instructions exec() ou show(). J'ai lu la documentation mais je n'ai pas trouvé d'explication à ce sujet.

1voto

scopchanov Points 3737

Les deux constructeurs de QProgressDialog appellent QProgressDialogPrivate::init, où forceTimer : QTimer est démarré :

 ...
 forceTimer = new QTimer(q);
 QObject::connect(forceTimer, SIGNAL(timeout()), q, SLOT(forceShow()));
 ...
 forceTimer->start(showTime);

Le slot forceShow() ressemble à ceci :

void QProgressDialog::forceShow() {
    Q_D(QProgressDialog);
    d->forceTimer->stop();
    if (d->shown_once || d->cancellation_flag)
        return;
    show();
    d->shown_once = true;
}

L'instruction show(); est la raison même pour laquelle le QProgressDialog est affiché à la création de l'objet.

1voto

Matt Eding Points 143

Comme il s'ouvrira automatiquement après avoir été construit, suivez-le d'une annulation.

auto * progressDialog = new QProgressDialog{};
progressDialog.cancel();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X