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

Luune Messages postés 25 Statut Membre -  
loupius Messages postés 789 Statut Membre -
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

2 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    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