IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Switcher entre 2 fenêtres


Sujet :

Qt

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut Switcher entre 2 fenêtres
    Bonjour à tous,

    mon problème est simple : j'ai une fenêtre de login et une interface de gestion pour mon logiciel.
    La personne qui lance le prog tombe sur la fenetre de login, puis s'il se log il passe à la fenêtre de gestion (l'ui de login devient invisible).

    Ma question est : comment repasser à la fenêtre de login une fois que je ferme la fenêtre de gestion ?
    Sachant que la fenêtre de login (la première) n'est pas détruite, elle est juste en visible(false), et que c'est elle qui gère l'apparition de la fenetre de gestion.

    Bien sûr j'ai tenté plein de choses, mais chaque fois des erreurs à gogo

    Si joint les fichiers qu'il faut

    uilogin.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #ifndef UILOGIN_H
    #define UILOGIN_H
     
    #include <QDialog>
    #include <QSqlQuery>
    #include "mainwindow.h"
     
     
    namespace Ui {
    class uiLogin;
    }
     
    class uiLogin : public QDialog {
    Q_OBJECT
    public:
    uiLogin(QWidget *parent = 0);
    MainWindow ui_main;
    ~uiLogin();
     
    protected:
    void changeEvent(QEvent *e);
     
    private:
    Ui::uiLogin *ui;
     
    private slots:
    void on_pushButton_2_released();
    void on_pushButton_released();
    };
     
    #endif // UILOGIN_H
    uilogin.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include "uilogin.h"
    #include "ui_uilogin.h"
     
    uiLogin::uiLogin(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::uiLogin)
    {
    ui->setupUi(this);
    //Place le curseur dans le champ login
    ui->txt_login->setFocus(Qt::OtherFocusReason);
    }
     
    uiLogin::~uiLogin()
    {
    delete ui;
    }
     
    void uiLogin::changeEvent(QEvent *e)
    {
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
    ui->retranslateUi(this);
    break;
    default:
    break;
    }
    }
     
    //Bouton OK --> tentative de login
    void uiLogin::on_pushButton_released()
    {
    QSqlQuery req;
    QString username,password;
    username = ui->txt_login->text();
    password = ui->txt_passwd->text();
    req.exec("SELECT * FROM praticien WHERE username = '"+username+"' AND password = '"+password+"';");
    if(req.next()){
    ui->txt_erreur->setText("");
    ui->txt_login->setText("");
    ui->txt_passwd->setText("");
    ui_main.show();
    this->setVisible(false);
    }else{
    ui->txt_erreur->setText("Mauvais login ou mot de passe");
    ui->txt_login->setText("");
    ui->txt_passwd->setText("");
    //Replace le curseur dans le champ login
    ui->txt_login->setFocus(Qt::OtherFocusReason);
    }
    }
     
    //Bouton Annuler
    void uiLogin::on_pushButton_2_released()
    {
    this->close();
    }

    mainwindow.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
     
    #include <QtGui>
    #include <QMainWindow>
    #include <QFileDialog>
    #include <qdom.h>
    #include "acquisition.h"
    #include <QString>
    #include <QList>
    #include <QSqlQuery>
    #include <vector>
    #include <QStandardItemModel>
    #include <QtSql>
    #include <QMessageBox>
    #include "vmcombobox.h"
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow {
    Q_OBJECT
    public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Ui::MainWindow *ui;
     
    protected:
    void changeEvent(QEvent *e);
     
    private:
    std::vector<Acquisition *> liste_acquisitions;
    VMComboBox * ma_cb;
    QGraphicsScene scene;//Scene pour les graphiques
    QStandardItemModel model;//Model de la table des patients
    QString dossier_projet;//Contient le chemin vers le dossier du projet courant
    bool projet_ouvert;//True si un projet est actuellement ouvert, false sinon
    void chargerConfig();//Fonction qui charge les préférences et options (fichier config.xml)
    void ouvrir_projet(QString lefichier);//Ouvre le projet passé en paramètre
    void fermerProjet();//Ferme le projet en cours
    //void chargerListeAnnotations(Acquisition * lacq);//Charge la liste avec les annotations
    void remplirVuePatients(int lid_patient);//Rempli la vue patient lors de l'ouverture d'un projet
    void remplirLesChamps(Annotation * lannot);//Rempli les champs avec les valeurs de l'annotation
     
    private slots:
    void on_liste_acquisitions_currentRowChanged(int currentRow);
    void on_actionFermer_Projet_triggered();//Si on clic sur Fichier/Fermer
    void on_ma_cb_currentIndexChanged(int index);//Si la combobox est changée
    void on_actionOuvrir_triggered();//Si on clique sur Fichier/Ouvrir
    void on_menuProjets_R_cents_2_triggered(QAction * action);//Si on clic sur Projets Récents
     
    };
     
    #endif // MAINWINDOW_H
    mainwindow.cpp (je vous fais grace des mes fonctions inutiles pour ma question)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QMouseEvent>
     
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    //On charge la configuration à partir du fichier config.xml
    chargerConfig();
    //Au démarrage, aucun projet n'est ouvert
    projet_ouvert = false;
    ma_cb = new VMComboBox();
    ma_cb->connect(ma_cb,SIGNAL(currentIndexChanged(int)),this,SLOT(on_ma_cb_currentIndexChanged(int)));
    ui->layout_cb->addWidget(ma_cb);
     
     
    }
    MainWindow::~MainWindow()
    {
    delete ui;
    }

    NB : les includes sont parfois pour des fonctions que je n'ai pas mis dans le code ici


    Merci

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    il faut prendre le problème à l'envers.

    Ta boite de dialogue doit apparaitre après MainWindow. Je vois que dans ta boite de dialogue tu as fait l'inverse, en faisant un show() de ton MainWindow.
    Tu pourrais plutot déclarer une méthode dans ton MainWindow qui fasse apparaitre cette boite de dialogue, d'où tu pourras récupérer d'éventuels résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void MainWindow::showLoginDialog()
    {
        LoginDialog *loginDialog = new LoginDialog(this);
        if(loginDialog->exec()==Qt::Accepted)
        {
              if(loginDialog->isValid();
              {
                    QMessageBox::information(this, "information","vous êtes maintenant connecté");
              }
             else
             {
                    QMessageBox::warning(this, "Erreur","Identifiant non reconnus");
             }
        } 
    }
    Tu pourrais faire de cette méthode un slot que tu connecterais à une action...

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Hmmm c'est pas bête du tout çaaaaaaaa
    Je vais pas avoir le temps de tester ce soir, mais demain, j'vous dit ce que ça donne

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Avec beaucoup de retard : super, ça marche.
    J'ai fait afficher l'ui_login à partir de la mainwindow en lui appliquant un setModal(true) pour qu'on ne puisse pas accéder à la mainwindow tant que le login n'est pas réussi.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    petite question subsidiaire : comment passer à ma MainWindow le login une fois le log réussi sur ma fenetre uiLogin ?

    J'ai bien essayé de passer ma MainWindow en paramètre de l'uiLogin (en laissant Widget ou en le changeant pour MainWindow) mais sans succès :s


    Merki

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par titmael Voir le message
    Avec beaucoup de retard : super, ça marche.
    J'ai fait afficher l'ui_login à partir de la mainwindow en lui appliquant un setModal(true)
    Je pense que la méthode exec() ouvre déjà le QDialog en modal (contrairement à show() en effet).

    petite question subsidiaire : comment passer à ma MainWindow le login une fois le log réussi sur ma fenetre uiLogin ?

    J'ai bien essayé de passer ma MainWindow en paramètre de l'uiLogin (en laissant Widget ou en le changeant pour MainWindow) mais sans succès :s
    Chuis pas sûr d'avoir compris, si tu veux récupérer des valeurs de ta boite de dialogue, il suffit d'y définir des méthodes d'accès.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QString MaDialog::login()
    {
         return ui->champ_login;
    }
    A faire en plus propre bien sur.

Discussions similaires

  1. Switcher entre les fenêtres
    Par Milo69 dans le forum Tkinter
    Réponses: 2
    Dernier message: 21/12/2006, 14h47
  2. Comment dessiner lignes entre des fenêtres ?
    Par Hauwke dans le forum Langage
    Réponses: 5
    Dernier message: 17/11/2005, 12h33
  3. Passage d'information entre deux fenêtres
    Par kuuya dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/08/2005, 14h35
  4. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52
  5. Communication entre 2 fenêtres
    Par pkdev dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 14/03/2005, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo