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 :

Conseils pour interface de style Picasa 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Formateur en informatique
    Inscrit en
    Mars 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 32
    Par défaut Conseils pour interface de style Picasa 3
    Bonjour tout le monde

    Deuxième post de la journée. Et nouveaux problèmes. L'idée à la base est simple, mais la réalisation compliquée. J'ai besoins de conseils et d'avis pour réaliser une interface du style picasa 3 voir photos :

    L'idée c'est que au lieu d'avoir des photos j'ai des éléments textes et images sur des utilisateurs. Pour ca j'ai créer une interface avec Qt designer.

    Cette interface s'appelle . "miniature"

    L'idée c'est de récupérer tous les user d'une base de donnée et d'afficher les éléments propre à chaque utilisateur dans une "miniature". C'est miniature sont ranger en groupe comme les images sont rangés dans des dossiers dans piacasa. L'idée est d'avoir la meme ergonomie (cliquer glisser pour changer de groupe - cliquer et optenir une fenetre de modif - etc.. ).

    Voila en esperant que vous avais compris l'idée de base.

    Maintenant passons au code. Voila ce que j'ai fais :
    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
     
     
    QSqlQuery query(db2);
            query.exec("SELECT * from user ORDER BY groupe_user ASC");
     
     
            //QGridLayout *layout = new QGridLayout;
            QList<miniature *> v;
     
            //initialisation des variables de mise en forme
            int x,y = 0;
            int sauvegroupe = -1;
     
            //boucle pour aller de personnes en personnes
            while(query.next())
                {
     
                //creation de l'entete nouveau groupe
                if(query.value(7).toInt()!=sauvegroupe)
                    {
                    if (y!=0)
                        {
                        x++;
                        y=0;
                        }
                    sauvegroupe = query.value(7).toInt();
                    }
     
     
                //creation de la miniature
                miniature* tete=new miniature(parent);
                //attribution des informations
                tete->setnomprenom(query.value(1).toString(),query.value(2).toString());
                tete->setpass(query.value(11).toString());
                tete->setlogin(query.value(10).toString());
                v.push_back (tete);
                //ajout aux widgets
                ui->gridLayout->addWidget(tete, x, y);
     
                y++;
                //retour à la ligne
                if (y>4)
                    {
                    y=0;
                    x++;
                    }
     
     
                }
            setLayout(ui->gridLayout);
    Voila ce code fonctionne mais j'aimerais savoir si je m'y prend de la bonne manière? Je suis preneur de conseils en tout genre. J'ai un temps de chargement qui est pas terrible mais ca marche.

    Merci d'avance.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonsoir

    Pour ce qui est de l'interface et des problèmes de chargement, tu devrais regarder les différents posts sur Qt Scene Graph (http://labs.qt.nokia.com/2010/05/18/a-qt-scenegraph/)


    Globalement, la première impression que ton code me laisse... est qu'il n'est peut être pas organisé correctement en objets.

    Je vois au moins 2 objets, que l'on peut rapprocher d'une structure modèle-vue : le conteneur de miniature et le widget affichant les miniatures.

    Pour le conteneur, fondamentalement, c'est une table avec 4 colonnes (nom, prénom, pass et login) issu d'une table SQL. Donc j'utiliserais une QSqlTableModel pour l'accès à la base et une QSortFilterProxyModel pour sélectionner les colonnes et les lignes.

    Pour l'affichage, il suffit ensuite de créer une classe héritant de QAbstractItemView et qui gérer automatiquement l'affichage. En particulier le nombre de colonne. Donc tout ton code avec x et y est déplacé dans cette classe :
    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
     
            //initialisation des variables de mise en forme
            int x,y = 0;
            int sauvegroupe = -1;
     
                //creation de l'entete nouveau groupe
                if(query.value(7).toInt()!=sauvegroupe)
                    {
                    if (y!=0)
                        {
                        x++;
                        y=0;
                        }
                    sauvegroupe = query.value(7).toInt();
                    }
     
                ui->gridLayout->addWidget(tete, x, y);
     
                y++;
                //retour à la ligne
                if (y>4)
                    {
                    y=0;
                    x++;
                    }
     
     
                }
    Cette classe prendrait en charge toute la gestion des clics et des drag & &drop

    Bon courage


    PS : tu aurais pu faire attention à l'indentation de ton code, pour la lisibilité

Discussions similaires

  1. Demande de conseil pour interface winforms
    Par alexabcinformatique dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/08/2010, 09h00
  2. [Ergonomie] Conseil pour interface graphique
    Par tixweb dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 24/10/2007, 22h30
  3. Réponses: 20
    Dernier message: 31/08/2006, 20h31
  4. Recherche API pour faire des interfaces ASCII (Style DOS ou Linux)
    Par sekiryou dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/08/2006, 00h37
  5. Conseil pour interface graphique en C
    Par MaxiMax dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 29/03/2004, 20h38

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