im en utilisant Qt QProgressBar et le placer dans la barre d'état sur ma fenêtre principale Comme cela dans le constructeur:Qt progressBar faire exception non gérée comment détecter quand widget parent chargement effectué
pb = new QProgressBar(statusBar());
pb->setTextVisible(false);
pb->hide();
statusBar()->addPermanentWidget(pb);
puis im en cours d'exécution procsses (web Page loadding dans ce cas) et d'essayer de montrer les progrès avec:
connect(ui.webView, SIGNAL(loadProgress(int)), SLOT(setProgress (int)));
void myMainWindow:: setProgress(int progress)
{
pb->show();
pb->setRange(0,100);
pb->setValue(progress);
}
Mais im obtenir exception non gérée quand il vient à PB-> show() Je suppose qu'il doit faire savoir quelque chose h chargement des fenêtres principales parent, puis la barre de progression Je lisais à propos de QAbstractEventDispatcher et processEvents mais pas compris comment l'implémenter. J'ai fait un petit test et mis l'appel de la fonction pb-> show() dans le bouton click signal/slut ce qui signifie im déclencher le pb-> show() après la page Web et les fenêtres principales entièrement chargées et son fonctionnement bien sans exception. cela me fait croire il y a problème avec le traitement de l'événement.
ici est la classe:
class MainWindowMainWindowContainer : public QMainWindow
{
Q_OBJECT
public:
MainWindowContainer(QWidget *parent = 0);
public slots:
void adjustLocation();
void changeLocation();
void adjustTitle();
void setProgress(int p);
void finishLoading(bool);
void finishedSlot(QNetworkReply* reply);
private:
Ui::OnLineBack_mainWindow ui;
int progress;
void createWebViewActions();
QProgressBar *pb;
void setprogressBar(int progress,bool show);
};
MainWindowContainer::MainWindowContainer(QWidget* parent) :
QMainWindow(parent),
{
ui.setupUi(this);
progress = 0;
createWebViewActions();
ui.webView->load(QUrl("www.cnnnn.com"));
ui.webView->show();
pb = new QProgressBar(statusBar());
pb->setTextVisible(false);
pb->hide();
statusBar()->addPermanentWidget(pb);
}
void MainWindowContainer::createWebViewActions()
{
connect(ui.webView, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
connect(ui.webView, SIGNAL(titleChanged(QString)), SLOT(adjustTitle()));
connect(ui.webView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
connect(ui.webView, SIGNAL(loadFinished(bool)), SLOT(finishLoading(bool)));
connect(ui.webView, SIGNAL(linkClicked(const QUrl&)),this, SLOT(linkClicked(const QUrl&)));
}
void MainWindowContainer::setProgress(int p)
{
progress = p;
adjustTitle();
}
void MainWindowContainer::adjustTitle()
{
qApp->processEvents();
pb->show();
if (progress <= 0 || progress >= 100)
{
QString titl = ui.webView->title();
statusBar()->showMessage(titl);
setprogressBar(-1,false);
}
else
{
statusBar()->showMessage(QString("%1 (%2%)").arg(ui.webView->title()).arg(progress));
setprogressBar(progress,true);
}
}
void MainWindowContainer::finishLoading(bool)
{
progress = 100;
adjustTitle();
}
void MainWindowContainer::setprogressBar(int progress,bool show)
{
if(show)
{
pb->show();
pb->setRange(0,100);
pb->setValue(progress);
}
else
{
pb->hide();
}
}
Je pense que nous avons besoin de plus de code pour déterminer ce qui est faux. Si vous avez créé votre widget, appeler -> show() est très bien. Vous n'avez pas besoin de "attendre le chargement" widget. Vous faites quelque chose d'autre qui ne va pas. –
quel code avez-vous besoin de plus? im appelant l'application fenêtre principale avec: MainWindowContainer mainWindowContainer; mainWindowContainer.show(); – user63898
Où est défini pb? Où se connecte la connexion? –