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

GTK+ Discussion :

Avis pour construire une IHM embarqué


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut Avis pour construire une IHM embarqué
    Bonjour,
    Je dois concevoir une ihm pour une appli embarqué. Après moulte recherche j'ai arrêter mon choix sur gtk (plus exactement gtkmm) en utilisant libglade
    Voilà mon problème :
    Je veux créer une fenêtre décomposée en 2 zones distinctes.
    A gauche une série de boutons => çà c'est pas le plus difficile
    A droite une zone de travail qui devra changer en fonction du bouton sur lequel on clique (dans la zone de gauche). Je devrais par exemple afficher des info, saisir des paramètres...

    La fenêtre complète étant de dimension figé je pensais travailler avec 2 Gtk::Fixed.
    J'arrive à créer le masque de la fenêtre complète avec glade mais comment faire pour créer des "fenêtres" différentes et les charger dans la zone de droite ?
    Peut être faut il créer des widgets particuliers ?

    Merci de me donner vos avis.

    Voici un bout de code qui ne marche pas pour vous donner une idée de ce que je veux faire en cliquant sur le bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void MainWindow::on_bt_directory_clicked()
    {
      DirectoryWindow* pDirectoryWindow = 0;
      m_refXml->get_widget_derived("DirectoryWindow", pDirectoryWindow);
      if(pDirectoryWindow)
      {
    	m_fixedRight->add(pDirectoryWindow); //Problème de cast !!! DirectoryWindow hérite de Gtk::Window mais comment caster ????
    	pDirectoryWindow->show();
      }
    }

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Pour ce genre de problème, j'utilise une page à onglets (GtkNotebook) et je cache les onglets. Ensuite lorsque tu clique sur un bouton, il suffit de changer de page

  3. #3
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut
    Merci pour ton avis,
    J'y avais bien pensé mais est ce que le fait de charger tous les onglets n'est pas trop couteux (en mémoire, délai d'initialisation etc) ?
    C'est sur qu'après il n'y a plus qu'à afficher la page souhaité et en terme de temps de chargement de la page on doit gagner du temps.
    Je vais creuser de ce côté, si tu as un exemple simple de découpage avec onglets, je suis preneur.
    A+

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    C'est sûr que tu vas devoir faire un choix

    Avec ce que je te propose, le temps d'initialisation et l'occupation mémoire sera plus importante.

    Si tu construis chaque page à la demande, ce sera plus compliqué à mettre en place et le changement de page sera plus long.

    Après tu peux aussi construire la page lors de la première demande et la garder en mémoire pour les appels suivant.

    La seule solution est de faire des tests pour voir ce qui convient le mieux à ton application

  5. #5
    IMS
    IMS est déconnecté
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 35
    Par défaut
    J'ai trouvé une solution qui me convient pour le moment.
    1- Je charge ma fenêtre principale contenant 2 panels via un HPaned
    2- A gauche je crée mes boutons
    3- A droite je supprime le panneau de droite s'il existe et je crée le nouveau panneau que je veux charger.

    Merci pour l'aide apporté, j'espère que le bout de code ci dessous pourra en éclairer quelques uns.
    Bye

    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
     
    void MainWindow::on_bt_clicked()
    {
    	loadIHMFromGlade(m_refXml, "treeView"); //Dans glade j'ai plusieurs interface pour le meme projet et treeView correspond à l'élément que je veux charger 
     
    	MyTreeview* pMyTreeview = 0; //Classe qui hérite de treeview
    	m_refXml->get_widget_derived("treeView", pMyTreeview);
    	if(pMyTreeview)
    	{
    		Widget* pOldWidget = m_pPanelMain->get_child2(); //m_pPanelMain est de type HPaned
    		if(pOldWidget != NULL)
    			m_pPanelMain->remove(*pOldWidget);
     
    		m_pPanelMain->add2(*pMyTreeview);
    		pMyTreeview->show();
    	}
    }
     
     
    void loadIHMFromGlade(Glib::RefPtr<Gnome::Glade::Xml> &refXml, const Glib::ustring& root)
    {
    	//Load the Glade file and instantiate its widgets:
    #ifdef GLIBMM_EXCEPTIONS_ENABLED
    	try
    	{
    		refXml = Gnome::Glade::Xml::create(sGladeFilename, root);
    	}
    	catch(const Gnome::Glade::XmlError& ex)
    	{
    		std::cerr << ex.what() << std::endl;
    	}
    #else
    	std::auto_ptr<Gnome::Glade::XmlError> error;
    	refXml = Gnome::Glade::Xml::create(sGladeFilename, root, "", error);
    	if(error.get())
    	{
    		std::cerr << error->what() << std::endl;
    	}
    #endif
    }

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

Discussions similaires

  1. Quelles librairies utiliser pour construire une belle IHM ?
    Par banban56 dans le forum Interfaces Graphiques en Java
    Réponses: 59
    Dernier message: 04/12/2009, 14h06
  2. Aide pour construire une requête SQL
    Par squalito dans le forum Oracle
    Réponses: 1
    Dernier message: 09/03/2007, 15h04
  3. Aide pour construire une requête SQL
    Par squalito dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/03/2007, 14h08
  4. [SQL] aide pour construire une requête
    Par mealtone dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/08/2006, 15h16
  5. [MIB] Questions pour construire une mib
    Par fadoua dans le forum Développement
    Réponses: 4
    Dernier message: 11/03/2004, 10h47

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