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

Discussion :

Fenêtre principale et fenêtre d'authentification

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    IRIS
    Inscrit en
    Septembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : IRIS
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 55
    Par défaut Fenêtre principale et fenêtre d'authentification
    Bonjour tout le monde.

    Je travail actuellement sur un projet école. Pour ce projet, on me demande avant l'apparition de la fenêtre principale, d'ajouter une fenêtre d'authentification.

    Je ne sais pas comment m'y prendre pour faire cela correctement.

    Après plusieurs essais je suis arrivé à cette conclusion :

    • Appeler FenetrePrincipale dans le main
    • Dans le constructeur de FenetrePrincipale appeler une méthode "ShowLoginDialog"
    • Dans cette méthode faire FenetreLogin->exec();


    ce qui donne :

    main.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
     
    #include <QtGui/QApplication>
    #include "fenprincipale.h"
     
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        FenPrincipale w;
        w.show();
     
        return a.exec();
    }
    FenPrincipale.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 FENPRINCIPALE_H
    #define FENPRINCIPALE_H
     
    #include <QMainWindow>
    #include "fenlogin.h"
     
    namespace Ui {
        class FenPrincipale;
    }
     
    class FenPrincipale : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit FenPrincipale(QWidget *parent = 0);
        ~FenPrincipale();
     
    private slots:
     
    private:
        Ui::FenPrincipale *ui;
     
        FenLogin *fenLogin;
     
        void showLoginDialog();
     
     
    };
     
    #endif // FENPRINCIPALE_H
    FenPrincipale.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
     
    #include "fenprincipale.h"
    #include "ui_fenprincipale.h"
    #include <QDebug>
     
    FenPrincipale::FenPrincipale(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::FenPrincipale)
    {
        fenLogin = new FenLogin(this);
        showLoginDialog();
        ui->setupUi(this);
     
    }
     
    void FenPrincipale::showLoginDialog()
    {
            qDebug()<<"execution";
            fenLogin->exec();
    }
     
     
    FenPrincipale::~FenPrincipale()
    {
        delete ui;
    }
    FenLogin.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
     
    #ifndef FENLOGIN_H
    #define FENLOGIN_H
     
    #include <QDialog>
    #include <QDesktopWidget>
     
    namespace Ui {
        class FenLogin;
    }
     
    class FenLogin : public QDialog
    {
        Q_OBJECT
     
    public:
        explicit FenLogin(QWidget *parent = 0);
        ~FenLogin();
     
    signals:
     
    private slots:
        void on_connexion_Login_cliked();
        void on_quitter_Login_cliked();
     
     
    private:
        Ui::FenLogin *ui;
     
        QString id,password;
     
        void initFenetre();
    };
     
    #endif // FENLOGIN_H
    FenLogin.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
     
    #include "fenlogin.h"
    #include "ui_fenlogin.h"
    #include <QDebug>
     
    FenLogin::FenLogin(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::FenLogin)
    {
        initFenetre(); 
    }
     
    void FenLogin::on_connexion_Login_clicked()
    {
        /*CONNEXION BDD A VENIR*/
     
            qDebug()<<"Connexion";
     
            this->close();
     
    }
     
    void FenLogin::on_quitter_Login_cliked()
    {
        qDebug()<<"quitter";
        this->close();  //Fermeture de l'application
     
    }
     
    void FenLogin::initFenetre()
    {
        ui->setupUi(this);
     
        /* LOGO APTERIX */
        QPixmap titre(QCoreApplication::applicationDirPath() + "/Logo/APTERIXV2.png");
        ui->apterixV2_Label->setPixmap(titre);
     
        /* Positionnement de la fenetre */
        QDesktopWidget *widget = QApplication::desktop();
        int desktop_width = widget->width();
        int desktop_height = widget->height();
        int x = desktop_width /2 - width()/2 -8;
        int y = desktop_height /2 - height()/2 -25;
     
        move(QPoint(x,y));
     
        ui->id_Login->setFocus(Qt::OtherFocusReason);
    }
     
    FenLogin::~FenLogin()
    {
        delete ui;
    }
    C'est pas vraiment Top, donc voila ce que j'aimerais :

    • Affichage FenLogin au demarage
    • Rentrer les identifiants
    • Si après verification dans la BDD, c'est correcte, on rentre sur la FenPrincipale, sinon on affiche une erreur et on reste sur FenLogin
    • Ajouter un bouton " Déconnexion " sur la FenPrincipale, et à nouveau refaire le même " chemin "


    Pour cela j'ai plusieurs questions :

    1. Ma méthode pour afficher la FenLogin ne fonctionne pas correctement, comment faire ?
    2. dans quelle classe vaut-il mieux faire le test des identifiants ?
    3. Pourais-je par la suite, rappelez cette méthode lorsque j'ajouterais le bouton déconnexion ?


    Excusez moi de toutes ces questions, si je parais un peu abruti je ne suis pas venu toute de suite, cela fait 2 jours que je planche dessus, impossible d'arriver à quelque chose de correcte

    cordialement Florian,

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 270
    Par défaut pas top mais à défaut de mieux
    un truc tout con qui est pas top mais à défaut de mieux sous réserve que pratiquement cela fonctionne:

    - Créer ton système de demande de login dans ta fenêtre
    si login mauvais boite de dialogue d'erreur
    si login ok fenetre.hide() pour cacher ta fenêtre, créer tes nouveaux éléments dans la fenêtre puis fenetre.show();

    Après je pense qu'il y a mieux mais mon niveau ne me permet pas de t'offrir mieux.

    L'idéal serait de créer une sous-fenêtre dans une fenêtre ayant la propriété hide, mais dans ce cas je pense que les sous-fenêtres ne seront pas affichées si qq1 à la solution ...
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Au début de l'application, lancer le formulaire de login ; si c'est correct, on émet un signal qui, bien connecté, balance la sauce (i.e. l'application principale) ; une fois déconnecté, il suffit de se débarrasser gentiment de l'instance de l'application et de retourner à la case login. Pensée rapide, cependant, à vérifier plus avant. Ça me semble mieux que de passer son temps à gérer des .hide() et .show().
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre confirmé
    Homme Profil pro
    IRIS
    Inscrit en
    Septembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : IRIS
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 55
    Par défaut
    Merci à vous deux, cependant, je ne sais pas très bien comment faire, on appel FenLogin dans le main ? ou ca reste bien une méthode de FenPrincipale ?

    un petit bout de code vite fait si possible pour expliquer ?

    Merci bien =)

  5. #5
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    De ce que j'ai compris de l'idée, c'est plutôt ta fenêtre principale qui devient une méthode de ta fenêtre de login. Lorsque l'utilisateur s'authentifie avec succès, ta boite de dialogue crée et affiche ta fenêtre principale (en se masquant elle même, à moins qu'il y ait une autre idée). Lorsque ta fenêtre principale se déconnecte, un appel un slot de ta boîte de dialogue pour lui dire de s'afficher à nouveau en détruisant la fenêtre principale.

    Par contre je ne sais pas s'il est possible qu'un objet appelant un slot soit détruit dans le code de ce slot.

    Au niveau du main tu crées simplement ta boîte de dialogue du coup, et c'est elle qui gère la suite au travers de signaux/slots.

  6. #6
    Membre confirmé
    Homme Profil pro
    IRIS
    Inscrit en
    Septembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : IRIS
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 55
    Par défaut
    Merci Yoni d'avoir clarifié, Merci à tous, ça marche niquel.

    Je n'avais pas vu cette possibilité.

    Résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2015, 21h19
  2. [QtGui] Afficher une fenêtre devant ma fenêtre principale
    Par astragoth dans le forum PyQt
    Réponses: 3
    Dernier message: 26/10/2010, 14h19
  3. Réponses: 2
    Dernier message: 31/01/2008, 09h46
  4. Réponses: 2
    Dernier message: 03/08/2004, 10h30
  5. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 19h25

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