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 :

Création d'un onglet avec QTabWidget

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut Création d'un onglet avec QTabWidget
    Bonjour à tous
    Pour le moment je travaille sur un projet vide dans lequel j'inclue un main.cpp
    j'ai seulement le fichier source.pro et le main.cpp
    Je souhaite aller progressivement avant de créer des fichiers headers ( Fenetre.cpp et Febetre.h etc...)
    Je travaille donc seulement dans le main.cpp
    Je souhaite créer un onglet dans une fenêtre.
    Malgré toute mes lectures et essais, je ne m'en sort pas.
    Dans mon code j'ai créé une fenêtre. ( ça marche)
    Pour créer mon onglet je code : QTabWidget ( Tab, & fenetre);
    Le Débogueur me dit : "Tab was not declared in this scope "
    J'avais pris la précaution de mettre en tête #include <QTabWidget>
    Je sais c'est une question de débutant, mais je suis débutant...
    Merci pour votre aide
    A+

  2. #2
    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
    Il nous faudrait un peu plus de détails pour t'aider, le code exact qui ne compile pas pour commencer et le message d'erreur.

    Si tu fais seulement quelques tests de quelques lignes pourquoi pas s'en tenir au main.cpp mais dès que tu commenceras à avoir du code un peu plus long autant créer des fichiers séparés dès le début car tu vas de toute façon devoir le faire tôt ou tard et déplacer ton code. Même si c'est pour bidouiller au seins d'une classe au final malgré tout, tu peux diviser ton code au moins dans les grandes lignes assez vite et ça t'aidera aussi à comprendre la responsabilité de chaque classe.

    Brièvement : le QTabWidget est un contenant, où chaque onglet est un nouveau QWidget, le tab se contente d'afficher l'un ou l'autre et de gérer la barre des onglets. Tu vas donc devoir créer explicitement un nouveau widget pour chaque onglet et l'ajouter dans ton QTabWidget (je ne me souviens pas de la fonction de tête mais ce sera dit dans la doc de QTabWidget).

  3. #3
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut
    Merci ymoreau pour ta réponse
    J'ai déjà travaillé ( en C++) sur les fichiers séparés (main.cpp - Guerrier.cpp - Guerrier.h - Arme.cpp et Arme.h ).
    Mais je l'ai fait parce que je maîtrisais le C++ ( je travaillais en console )
    Pour Qt ( que je ne maîtrise pas encore ) je préfère aller pas à pas pour réaliser des fenêtres.
    Pour moi c'est tout à fait didactique de tester fonction par fonction : je n'ai pas l'intention de coder tout de suite des pages entières (pour le moment)
    c'est pourquoi je préfère réaliser de tout petits codes dans le main.cpp

    voici la totalité de mon code dans le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTabWidget>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        // Création d'un widget qui servira de fenêtre
        QWidget fenetre;
        fenetre.setFixedSize(400, 200);
        // Création d'un Onglet : NE MARCHE PAS
        QTabWidget ( Tab1, &fenetre);
     
        // Création du bouton, ayant pour parent la "fenetre"
        QPushButton bouton(" cliquez ici ", &fenetre);
        // Customisation du bouton
        bouton.setFont(QFont("arial", 14));
        bouton.move (150,70);
     
        // Affichage de la fenêtre
        fenetre.show();
     
        return app.exec();
    }
    --------------------------------------
    le code fichier.pro :
    -------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SOURCES += \
        main.cpp
    QT += \
        widgets
    --------------------------------------
    et mes codes erreurs :
    --------------------------------------
    In function 'int qMain(int, char**)':
     'Tab1' was not declared in this scope
         QTabWidget ( Tab1, &fenetre);
                      ^
    --------------------------------------
    J'espère avoir retenu toute ton attention
    Merci A+

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    L'erreur est explicite, Tab1 n'est pas déclaré avant le constructeur de QTabWidget.

    Il manque pas mal de choses à ton code :
    Tu devrais créer tes widgets avec new et récupérer le pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QWidget *fenetre = new QWidget();
    QTabWidget *tabwidget = new QTabWidget(fenetre);
    Ensuite, à partir du pointeur tabwidget, tu rajoutes l'onglet avec la méthode QTabWidget::addTab()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QPushButton *bouton = new QPushButton("cliquez ici", fenetre);
    tabwidget->addTab(bouton, "Titre de l'onglet");
    Je t'invite aussi à jeter un coup d'œil à la documentation de Qt, notamment celle de la classe QTabWidget pour voir les méthodes et les paramètres à utilser.

  5. #5
    Membre confirmé Avatar de tarpal
    Homme Profil pro
    Ingénieur Electronique retraité
    Inscrit en
    Février 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Electronique retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 70
    Par défaut
    Bonjour Daïmanu
    Je reconnais là l'esprit d'un programmeur...
    je n'en suis pas encore là.
    Avant de coder selon ta méthode je vais de ce pas réviser la fonction new et les pointeurs...
    Je croyais que new servait uniquement à l'allocation d'une case mémoire
    En plus il fallait ( de ce que j'ai appris) faire un delete pour libérer cette case mémoire après la fonction.
    je ne cloture donc pas encore le sujet, je reviendrais après avoir travaillé le sujet.
    Malgré tout est-ce faux ce que je croyais savoir sur le new ?
    A+

  6. #6
    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
    Non tu avais bien compris. En programmation objet le new sert à créer une instance d'une classe, créer un objet donc. Tu trouveras des tas de cours et d'explication sur le sujet.
    Quant au framework Qt il a justement un mécanisme pour automatiser le delete et éviter les erreurs/oublis de la part du développeur : le système parent-enfant. En résumé quand tu donnes un parent à un nouvel objet Qt (héritant toujours de QObject), le parent étant un pointeur vers un autre objet Qt, l'objet enfant sera automatiquement détruit par son parent quand le parent sera détruit. Tu peux lire les détails de ce principe dans la doc également : http://doc.qt.io/qt-5/objecttrees.html

  7. #7
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Ta compréhension de new/delete est correcte, mais il s'avère que Qt prend en charge la gestion mémoire, et appelle delete lui-même automatiquement quand il le faut.

    Du coup, quand on utilise Qt on a l'habitude de faire des new pour créer des objets comme je te l'ai montré.
    Ça n'est évidement pas correct en C++ « de base ».

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

Discussions similaires

  1. Création de plusieurs onglets avec saut de ligne
    Par aude_alti dans le forum Macros et VBA Excel
    Réponses: 61
    Dernier message: 03/04/2013, 16h23
  2. Création dynamique d'un onglet avec template
    Par abraxis dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 09/11/2010, 10h21
  3. Création d'onglets avec TTabSheet et TTabControl
    Par amza66 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/05/2010, 19h58
  4. Création d'onglet avec Visual
    Par ludojojo dans le forum MFC
    Réponses: 2
    Dernier message: 13/05/2008, 16h54
  5. Réponses: 7
    Dernier message: 30/08/2007, 06h54

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