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 :

Mystere probleme d'appel de fonction


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ze veritable farf
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut Mystere probleme d'appel de fonction
    Bonjour,

    Voila mon probleme, j'ai une methode qui permet d'ajouter un nouvel onglet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void FenPrincipale::nouvelOnglet() 
    {
    	zoneTexte[nb_onglets] = new QTextEdit;
     
    	zoneTexte[nb_onglets]->setText(chaine[nb_onglets]); // pour debug
     
    	sousFenetre[nb_onglets] = zoneCentrale->addSubWindow(zoneTexte[nb_onglets]);
     
    	zoneCentrale->addSubWindow(sousFenetre[nb_onglets]);
     
    	nb_onglets++;
    }
    le problème est que suivant le moment auquel je fais appel a cette méthode, il arrive que les onglets ne soit pas créés correctement (on les voit mais on ne peut pas les cliquer).

    Lorsque j'appelle la méthode directement dans le constructeur de ma classe, les onglets sont correctement créés :

    Mais si j'appelle la méthode au travers d'un slot de connexion (relié au signal bouton nouvel onglet et placé a la fin du constructeur), alors l'onglet créé devient visible mais non sélectionnable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(actionNouvelOnglet, SIGNAL(triggered()), this, SLOT(nouvelOnglet()));
    Le slot de connexion est defini dans le .h comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public slots :
     
    	void nouvelOnglet();
    Auriez vous une explication au fait que les onglets créés par un appel explicite dans le constructeur fonctionnent parfaitement et ceux créés par l'appel de la méthode via le signal ne fonctionnent pas ?

    Merci.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    1- pourquoi cela??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sousFenetre[nb_onglets] = zoneCentrale->addSubWindow(zoneTexte[nb_onglets]);
    zoneCentrale->addSubWindow(sousFenetre[nb_onglets]);
    2- Il me semble qu'il faut appliquer shows sur la nouvelle subWindows

  3. #3
    Membre confirmé Avatar de ze veritable farf
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    Merci, oui le fait d'utiliser la methode show resout mon probleme, mais ce que je ne comprends pas c'est pourquoi les onglets créés dans mon constructeur ne pausent pas les memes problemes ?

    Voici mon constructeur :

    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
    #include "FenPrincipale.h"
    FenPrincipale::FenPrincipale() 
    {
    	zoneCentrale = new QMdiArea;
    	typeAffichage = true; // (true : fenetres, false : onglets)
    	nb_onglets = 0;
     
    	// Menu
     
    	QMenu *menuFichier = menuBar()->addMenu("&Fichier");
    	QAction *actionQuitter = menuFichier->addAction("&Quitter");
    	actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
    	QAction *actionNouvelOnglet = menuFichier->addAction("&Nouvel Onglet");
    	actionNouvelOnglet->setShortcut(QKeySequence("Ctrl+T"));
    	QMenu *menuEdition = menuBar()->addMenu("&Edition");
    	QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
    	QAction *actionChanger = menuAffichage->addAction("&Changer");
     
    	// Creation de 3 onglets
     
    	nouvelOnglet();
    	nouvelOnglet();
    	nouvelOnglet();
     
    	// connexion signaux
     
    	connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
    	connect(actionChanger, SIGNAL(triggered()), this, SLOT(changerTypeAffichage()));
    	connect(actionNouvelOnglet, SIGNAL(triggered()), this, SLOT(nouvelOnglet()));
    }
    Auriez vous une idée ?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Yo
    1- tu ma pas repondu a ma question 1. Y as une erreur c'est pour cela que je te demande
    Pour le show, c'est ici et dans un des exemples (dure à comprendre.. mais y avais eu le même cas)
    http://qt.developpez.com/doc/latest/qmdisubwindow.html
    You use the same API when programming with subwindows as with regular top-level windows (e.g., you can call functions such as show(), hide(), showMaximized(), and setWindowTitle()).
    Citation Envoyé par ze veritable farf Voir le message
    Merci, oui le fait d'utiliser la methode show resout mon probleme, mais ce que je ne comprends pas c'est pourquoi les onglets créés dans mon constructeur ne pausent pas les memes problemes ?
    Auriez vous une idée ?
    Je pense que c'est un cas particulier. En gros tu ajoute des subwindows avec le premier affichage de ta QMdiArea.. Ainsi je pense que Qt considère comme un cas initiale de ta QMdiArea et l'affiche avec ses subwindows prédéfinie.

Discussions similaires

  1. Probleme d'appel de fonction
    Par maximus35 dans le forum C
    Réponses: 12
    Dernier message: 01/02/2012, 11h13
  2. [XL-2003] Probleme sur appel de fonction auto depuis une cellule faisant une affectation
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2011, 12h43
  3. Probleme d'appel de fonction
    Par max44410 dans le forum Zend Framework
    Réponses: 1
    Dernier message: 29/06/2007, 07h39
  4. probleme d'appel de fonction!
    Par transistor49 dans le forum C++
    Réponses: 5
    Dernier message: 11/03/2005, 10h46
  5. Réponses: 8
    Dernier message: 13/08/2004, 12h32

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