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

Fermé
Luune Messages postés 24 Date d'inscription mercredi 26 avril 2017 Statut Membre Dernière intervention 25 juillet 2017 - 7 juil. 2017 à 12:31
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 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
A voir également:

2 réponses

Gest83 Messages postés 28 Date d'inscription jeudi 6 juillet 2017 Statut Membre Dernière intervention 4 août 2017 2
7 juil. 2017 à 12:37
Salut,
Je pense que ton problème tu devrais le poster sur :
https://codes-sources.commentcamarche.net/
1
Luune Messages postés 24 Date d'inscription mercredi 26 avril 2017 Statut Membre Dernière intervention 25 juillet 2017 5
7 juil. 2017 à 12:42
Ah je savais pas, merci beaucoup.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
27 juil. 2017 à 05:06
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.
0