[QT] QTimer qui s'exécute chaque 30secondes

Luune 24 Messages postés mercredi 26 avril 2017Date d'inscription 25 juillet 2017 Dernière intervention - 7 juil. 2017 à 12:31 - Dernière réponse : loupius 696 Messages postés dimanche 1 novembre 2009Date d'inscription 27 juillet 2017 Dernière intervention
- 27 juil. 2017 à 05:06
Bonjour,

J'ai une fenêtre qui comporte 3 Frame, Je veux afficher un seul Frame chaque 30secondes ( le 1er, apres le 2eme et apres le 3eme ainsi de suite)
Pour le faire j'ai essayé ce code
#include "logista.h"
#include "ui_logista.h"

Logista::Logista(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Logista)
{

QTimer *timer2 = new QTimer(this);
connect(timer2, SIGNAL(timeout()), this, SLOT(ChangeFrame()));
timer2->start(30000);

ui->setupUi(this);
}

Logista::~Logista()
{
delete ui;
}

void Logista::ChangeFrame()
{

Frame1();
Frame2();
Frame3();

}
void Logista::Frame1()
{
ui->frame->show();
ui->frame_2->hide();
ui->frame_3->hide();
}
void Logista::Frame2()
{
ui->frame_2->show();
ui->frame->hide();
ui->frame_3->hide();
}
void Logista::Frame3()
{
ui->frame_3->show();
ui->frame->hide();
ui->frame_2->hide();
}



Avec ce code, les 3 Frames s'affichent et après 30 secondes, le Frame 3 s'affiche et rien ne se passe après

J’espère que j'ai bien expliqué mon problème, aidez moi a le résoudre s'il vous plait. Merci
Afficher la suite 
24Messages postés mercredi 26 avril 2017Date d'inscription 25 juillet 2017 Dernière intervention

3 réponses

Répondre au sujet
Gest83 28 Messages postés jeudi 6 juillet 2017Date d'inscription 4 août 2017 Dernière intervention - 7 juil. 2017 à 12:37
+1
Utile
1
Salut,
Je pense que ton problème tu devrais le poster sur :
http://codes-sources.commentcamarche.net
Cette réponse vous a-t-elle aidé ?  
Luune 24 Messages postés mercredi 26 avril 2017Date d'inscription 25 juillet 2017 Dernière intervention - 7 juil. 2017 à 12:42
Ah je savais pas, merci beaucoup.
Commenter la réponse de Gest83
loupius 696 Messages postés dimanche 1 novembre 2009Date d'inscription 27 juillet 2017 Dernière intervention - 27 juil. 2017 à 05:06
0
Utile
Bonsoir,

L'affichage est logique; l'appel à 'ChangeFrame()' équivaut à:
  ui->frame->show();
ui->frame_2->hide();
ui->frame_3->hide();
ui->frame_2->show();
ui->frame->hide();
ui->frame_3->hide();
ui->frame_3->show();
ui->frame->hide();
ui->frame_2->hide();
Donc finalement seule 'frame_3 est montré.
Il vaut mieux écrire simplement quelque chose du genre:
static int flag;
void Logista::ChangeFrame()
{
ui->frame ->setVisible(flag == 0);
ui->frame_2->setVisible(flag == 1);
ui->frame_3->setVisible(flag == 2);
if (++flag >= 3)
flag = 0;
}
Bonne continuation.
Commenter la réponse de loupius