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 :

QMenu : impossible de convertir le paramètre à la connexion


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut QMenu : impossible de convertir le paramètre à la connexion
    Bonjour,

    j'ai une liste de message d'erreurs qui me rend folle alors que je suis presque sure que c'est rien de mechant :/

    voici la liste des erreurs :
    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
     
    1>------ Début de la génération*: Projet*: cone_test_1_11, Configuration*: Release Win32 ------
    1>Compilation en cours...
    1>test.cpp
    1>.\test.cpp(13) : error C2664: 'QMenu::QMenu(const QString &,QWidget *)'*: impossible de convertir le paramètre 2 de 'test *const ' en 'QWidget *'
    1>        Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\test.cpp(22) : error C2664: 'QMenu::QMenu(const QString &,QWidget *)'*: impossible de convertir le paramètre 2 de 'test *const ' en 'QWidget *'
    1>        Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\test.cpp(26) : error C2664: 'QMenu::QMenu(const QString &,QWidget *)'*: impossible de convertir le paramètre 2 de 'test *const ' en 'QWidget *'
    1>        Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\test.cpp(31) : error C2664: 'QMenu::QMenu(const QString &,QWidget *)'*: impossible de convertir le paramètre 2 de 'test *const ' en 'QWidget *'
    1>        Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>hello_cone_soqt.cpp
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\hela\Documents\Visual Studio 2008\Projects\cone_test_1_11\cone_test_1_11\Release\BuildLog.htm"
    1>cone_test_1_11 - 4 erreur(s), 0 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    voici le code
    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
     
    #include "test.h"
    #include <QtGui>
    test ::test(QWidget * parent) {
     
    	 setPopUp();
    }
    void test :: setPopUp()
    {	
    	QMenuBar *menuBar = new QMenuBar();
     
     
     file = new QMenu(" &File",this);
    	file->addSeparator();
     
     
    	file->addSeparator();
     
     
    	menuBar->addMenu( file );  
     
    	execute= new QMenu(" &Execute",this);
     
    		menuBar->addMenu( execute );
     
    	haptic= new QMenu(" &Haptic",this);
     
     
    	menuBar->addMenu( haptic );
     
    	about= new QMenu("&About",this);
     
    }
    merci de bien vouloir me repondre

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Il y a moyen d'avoir le header? C'est peut-être là que ça cloche (test est-il bien un QWidget?).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    le header est :

    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
    #include <QtGui>
     
     
     
    class test 
    {
     
    	public:	
     
    		test (QWidget * parent = 0);
     
    	void		setPopUp();
    	private:
     
     
    		QMenu		*file;
     
    		QMenu		*execute;
     
    		QMenu		*about;
     
     
     
     
    };

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Voilà, donc la class Test n'hérite pas de QWidget.
    Mais QMenu réclame un QWidget:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QMenu ( const QString & title, QWidget * parent = 0 )
    Il faut donc que ta classe devienne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Test : public QWidget{
    ....
    };
    Dans ton constructeur, ce que tu as, c'est un potentiel paramètre de type QWidget, mais ça ne veut pas dire que ta classe est de ce type.

    D'ailleur, dans l'implémentation de ton constructeur, n'oublie pas d'envoyer ce paramètre à la classe parente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test ::test(QWidget * parent) : QWidget(parent) {
     
    	 setPopUp();
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    d'accord je vais essayer ca (ce soir parce que j'ai pas le projet sur moi maintenant) ! mais ca me semble logique
    Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    j'ai un sousi du meme genre je crois avec cette methode :
    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
    void	CMainWindow::liste_butons()
    {
    QWidget *zoneCentrale = new QWidget;
     
    	QLineEdit *test1LineEdit = new QLineEdit(this);
    	QLineEdit *test2LineEdit = new QLineEdit(this);
    	QLineEdit *test3LineEdit = new QLineEdit(this);
     
    //	QWidget *win = new QWidget(this);
     	QLabel *test1Label = new QLabel(("&test1:"),this);
     	test1Label->setBuddy(test1LineEdit);
     	QLabel *test2Label = new QLabel(("&test2:"),this);
     	test2Label->setBuddy(test2LineEdit);
     	QLabel *test3Label = new QLabel(("&test3:"),this);
     	test3Label->setBuddy(test3LineEdit);
     	QGridLayout *gridLayout = new QGridLayout();
     	gridLayout->addWidget(test1Label, 0, 0);
     	gridLayout->addWidget(test1LineEdit, 0, 1);
     	gridLayout->addWidget(test2Label, 1, 0);
     	gridLayout->addWidget(test2LineEdit, 1, 1);
     	gridLayout->addWidget(test3Label, 2, 0);
     	gridLayout->addWidget(test3LineEdit, 2, 1);
     
     	this->setLayout(gridLayout);
     
     
     
     
    }
    mais là enfait,si je mets pas mes éléments dans le QGridLayout,ils sont affiché dans ma fenetre (lun sur l'autre) mais si je le met,y'a pas affichage du tout. au debut je pensais qu'il y'avait un "show" qui manquait,mais le show le metterai dans une fenetre à part,pas la principale.
    peux tu m'aider sur ce coup s'il te plait ?

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    je suppose que CMainWindow est de type "QMainWindow".

    Dans ce cas, les éléments que tu veux afficher (labels et LineEdits) doivent être placés dans le Widget central. Tu as déjà ce widget central (première ligne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QWidget *zoneCentrale = new QWidget;
    C'est donc dans ce widget que tu dois placer tes éléments.

    Une fois placés, il ne faut pas oublier de définir ce widget comme zone centrale de ton MainWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->setCentralWidget(zoneCentrale);
    Le parent de tes éléments sera zoneCentrale et le gridlayout sera attaché a ce widget, ce qui donne au final quelque chose comme ça:

    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
    void	CMainWindow::liste_butons()
    {
        QWidget *zoneCentrale = new QWidget;
    
        QLineEdit *test1LineEdit = new QLineEdit(zoneCentrale);
                QLineEdit *test2LineEdit = new QLineEdit(zoneCentrale);
                QLineEdit *test3LineEdit = new QLineEdit(zoneCentrale);
    
     
                QLabel *test1Label = new QLabel(("&test1:"),zoneCentrale);
                test1Label->setBuddy(test1LineEdit);
                QLabel *test2Label = new QLabel(("&test2:"),zoneCentrale);
                test2Label->setBuddy(test2LineEdit);
                QLabel *test3Label = new QLabel(("&test3:"),zoneCentrale);
                test3Label->setBuddy(test3LineEdit);
                QGridLayout *gridLayout = new QGridLayout();
                gridLayout->addWidget(test1Label, 0, 0);
                gridLayout->addWidget(test1LineEdit, 0, 1);
                gridLayout->addWidget(test2Label, 1, 0);
                gridLayout->addWidget(test2LineEdit, 1, 1);
                gridLayout->addWidget(test3Label, 2, 0);
                gridLayout->addWidget(test3LineEdit, 2, 1);
    
                zoneCentrale->setLayout(gridLayout);
                setCentralWidget(zoneCentrale);
    }
    ne pas oublier la dernière ligne.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    ah oui ca marche super bien !!
    merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    ben finalement ca marche plus aussi bien que ca :/
    j'ai une QmdiArea sur le coté ou je visualise une sous fenetre qui ne marche plus du coup et ca,c'est moche :/
    et apparement le poblem vient de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setCentralWidget(zoneCentrale);
    parcque quand je commente cette ligne,elle marche mais je ne visualise plus mon gridlayout

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    houla, faudra être plus précise dans ce que tu veux et également dans les termes utilisés, à la limite un ptit screenshot ça aiderai.

    Pour le mdiArea, c'est également tout une histoire. Ce mdiArea, il se trouve au centre de ton MainWindow?

    Bref je peux pas t'aider sans plus de précision.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    voilà deux imprims ecrans du avant et apres ajout du widget,
    et j'avoue aussi que j'ai un modifié le code un ajoutant un Qframe.
    donc voici le nouveau code:
    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
    	void	CMainWindow::liste_butons()
    {
        QWidget *zoneCentrale = new QWidget;
     
     
    	  QFrame *frame = new QFrame(zoneCentrale);
        frame->setFrameShape(QFrame::StyledPanel);
        frame->setGeometry(30, 30,1000, 900);
     
     
     
                QLineEdit *test1LineEdit = new QLineEdit(zoneCentrale);
                QLineEdit *test2LineEdit = new QLineEdit(zoneCentrale);
                QLineEdit *test3LineEdit = new QLineEdit(zoneCentrale);
     
     
                QLabel *test1Label = new QLabel(("&test1:"),zoneCentrale);
                test1Label->setBuddy(test1LineEdit);
                QLabel *test2Label = new QLabel(("&test2:"),zoneCentrale);
                test2Label->setBuddy(test2LineEdit);
                QLabel *test3Label = new QLabel(("&test3:"),zoneCentrale);
                test3Label->setBuddy(test3LineEdit);
                QGridLayout *gridLayout = new QGridLayout();
    			gridLayout->addWidget(test1Label, 0, 0) ; //Qt::alignment = 0);
                gridLayout->addWidget(test1LineEdit, 0, 1);
                gridLayout->addWidget(test2Label, 1, 0);
                gridLayout->addWidget(test2LineEdit, 1, 1);
                gridLayout->addWidget(test3Label, 2, 0);
                gridLayout->addWidget(test3LineEdit, 2, 1);
     
                frame->setLayout(gridLayout);
               setCentralWidget(zoneCentrale); 
    }
    ps : bon coté design c'est pas encore ça,mais j'y travaille toujours :p
    Images attachées Images attachées   

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Personnellement, pour rester cohérent, je définirais une mdiArea comme widget central.
    Et dans ce mdiArea créer des sous fenêtres qui contiendraient ce que je souhaite.

    Pour prendre ton cas, j'ai créerais une subWindow qui contient tes labels et zones de saisie, et une autre subWindow qui pourrait contenir tout autre chose (comme ton cone).

    Pour le code donc, je défini une mdiArea comme centralWidget, et ensuite je crée dans cette mdiArea deux subWindow:

    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
        QMdiArea *zoneCentrale = new QMdiArea(this);
    
        QWidget *maSousFenetreFrame = new QWidget(zoneCentrale);
        QWidget *autreSousFenetre = new QWidget(zoneCentrale);
    
        QFrame *frame = new QFrame(maSousFenetreFrame);
    
        zoneCentrale->addSubWindow(maSousFenetreFrame);
        zoneCentrale->addSubWindow(autreSousFenetre);
    
        autreSousFenetre->setWindowTitle("Autre sous fenetre");
        maSousFenetreFrame->setWindowTitle("Sous fenetre avec frame");
    
        frame->setFrameShape(QFrame::StyledPanel);
    
        QGridLayout *gridLayout = new QGridLayout();
        maSousFenetreFrame->setLayout(gridLayout);
    Il y a aussi une petit modif a faire dans ce cas, le layout doit être appliqué au widget d'une subWindow et non a zoneCentrale.

    Si tu ne souhaite pas avoir plusieurs sous fenêtres comme ça, il ne faut pas utiliser une mdiArea.

    Résultat en pièce jointe
    Images attachées Images attachées  

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    moi enfait au debut je voulais faire un truc de ce genre ,une interface en Qt qui me permet de visualiser le cone comme dans l'image que j'ai envoyé.
    sachant que le code du cone est:
    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
    #include <Inventor/Qt/SoQt.h>
      #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
      #include <Inventor/nodes/SoBaseColor.h>
      #include <Inventor/nodes/SoCone.h>
      #include <Inventor/nodes/SoSeparator.h>
     
      int
      main(int argc, char ** argv)
      {
        // Initializes SoQt library (and implicitly also the Coin and Qt
        // libraries). Returns a top-level / shell Qt window to use.
        QWidget * mainwin = SoQt::init(argc, argv, argv[0]);
     
        // Make a dead simple scene graph by using the Coin library, only
        // containing a single yellow cone under the scenegraph root.
        SoSeparator * root = new SoSeparator;
        root->ref();
     
        SoBaseColor * col = new SoBaseColor;
        col->rgb = SbColor(1, 1, 0);
        root->addChild(col);
     
        root->addChild(new SoCone);
     
        // Use one of the convenient SoQt viewer classes.
        SoQtExaminerViewer * eviewer = new SoQtExaminerViewer(mainwin);
        eviewer->setSceneGraph(root);
        eviewer->show();
     
        // Pop up the main window.
        SoQt::show(mainwin);
        // Loop until exit.
        SoQt::mainLoop();
     
        // Clean up resources.
        delete eviewer;
        root->unref();
     
        return 0;
      }
    tous ce qui est SoSeparator,scenegraphe etc..c' est du Inventor une bibliotheque graphique.
    tous ce qui est SoQt et compagnie,on peut dire que c'est du Qt construit autour de la fenetre du cone,et ce que je voudrai faire c'est un viewer plus complet que celui du cone rouge (dans les pieces jointes),plutot comme l'autre viewer.
    mais moi j'ai pas su comment afficher le cone dans une fenetre en Qt plus "developpé " (jveux dire avec les menus et tout)
    donc le QmdiArea a été pour moi une petite solution de secours en attendant mieux :/
    (dailleurs si tu as une idée..)
    mais bon, merci quand meme pour ton aide
    ps : tu travaille avec qt creator ?
    Images attachées Images attachées   

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Oui je travaille avec QtCreator, assez pratique.

    Pour ton problème, le truc c'est que mainWindow ne travaille pas forcément avec une mdiArea.
    Tu peux bénéficier des avantages du mainWindow (barre de menu, dockWidget, etc...) et définir un Widget central dans lequel il y aurais deux autres widget (des frames ou des qwidget).
    L'un contiendrais tes éléments (par exemple une "vue" dans ton cas) et l'autre aurait ton objet graphique.

    Donc je reprend ce que j'ai fait, j'enlève tout ce qui est mdiArea et subWindow. Je met également un layout horizontal pour ces deux widget (vu qu'il doivent être l'un à coté de l'autre). Je colorie bien mes frames pour que tu voie qu'il y en a bien deux.

    Code :
    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
        QWidget *zoneCentrale = new QWidget(this);
     
        QFrame *mesElements = new QFrame(zoneCentrale);
        QFrame *autreSousFenetre = new QFrame(zoneCentrale);
     
     
     
        //remplissage de "mesElements"
        mesElements->setStyleSheet("background-color: rgb(50, 170, 255)");
        QGridLayout *gridLayout = new QGridLayout();
        mesElements->setLayout(gridLayout);
     
        QLineEdit *test1LineEdit = new QLineEdit(mesElements);
        QLineEdit *test2LineEdit = new QLineEdit(mesElements);
        QLineEdit *test3LineEdit = new QLineEdit(mesElements);
     
        QLabel *test1Label = new QLabel(("&test1:"),mesElements);
        test1Label->setBuddy(test1LineEdit);
        QLabel *test2Label = new QLabel(("&test2:"),mesElements);
        test2Label->setBuddy(test2LineEdit);
        QLabel *test3Label = new QLabel(("&test3:"),mesElements);
        test3Label->setBuddy(test3LineEdit);
     
        gridLayout->addWidget(test1Label, 0, 0);
        gridLayout->addWidget(test1LineEdit, 0, 1);
        gridLayout->addWidget(test2Label, 1, 0);
        gridLayout->addWidget(test2LineEdit, 1, 1);
        gridLayout->addWidget(test3Label, 2, 0);
        gridLayout->addWidget(test3LineEdit, 2, 1);
     
     
        //remplissage de "autreSousFenetre"
        autreSousFenetre->setStyleSheet("background-color: rgb(255, 170, 0)");
        QVBoxLayout *lay_autreSousFenetre = new QVBoxLayout(autreSousFenetre);
        QLabel *label = new QLabel("un tas de choses ici");
        lay_autreSousFenetre->addWidget(label);
     
     
        //creation et remplissage du layout horizontal du widget central
        zoneCentrale->setLayout(new QHBoxLayout());
        zoneCentrale->layout()->addWidget(mesElements);
        zoneCentrale->layout()->addWidget(autreSousFenetre);
     
        setCentralWidget(zoneCentrale);
    Il faut tu pense bien à l'emboitement de tes widgets, définir leur conteneur.

    Si ce que tu souhaite c'est avoir plusieurs mainWindow (contenu dans des subWindow) il faudrait changer QFrame par QMainWindow (je dois tester pour être sur que ça marche).
    Images attachées Images attachées  

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    en ce qui concerne Qt creator,j'avais deja essayé d'utiliser,mais je pensais qu''il allait m'ajouter du corp derriere,genre quand je mets un qwidget dans la fenetre,y'aura un new qwidget qui s'ecrit..mais c'est pas le cas.
    je me trompe ou c'est juste une facette,et c'est à toi d'ecrire du vraie code ?
    (comme tu le fais maintenant ? )

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    là pour ton prog, j'écris tout à la main, donc j'utilise pas le Designer, le Designer c'est juste une aide intégrée à QtCreator, mais ce dernier offre beaucoup d'avantages dont notamment une auto-complétion redoutable pour Qt.

    Lorsque tu crée à la souris tes fenêtres, le code est automatiquement généré.
    Il faut bien sûr savoir créer tes GUI sans le designer, à la "main". Mais pour une question de productivité et de clarté tu peux passer par le Designer pour créer des éléments simples.

    Ça permet de se concentrer essentiellement sur le fond et non plus sur la forme.

    Par exemple dans ton code, c'est assez pénible je trouve de devoir écrire les menus, les labels, etc... Je préfère laisser ça au Designer, sinon ça ralentit considérablement ta productivité.

    Tout ce que le Designer te crée, t'y a accès dans la partie "code".

    Pour en revenir à ton problème, j'ai une question:
    est-ce que tu souhaite plusieurs fenêtre qui auraient chacun leur menu (Fichier, executer,etc...) comme dans la pièce ci-jointe ou alors une seule comme dans ma précédente capture?
    Images attachées Images attachées  

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    plutot un menu pour le tout,comme dans le snapshot que jt'ai filé ,mais deja j'ai 2 questions :

    1 / je peux toujours mettre un QmdiArea dans la zone jaune ou non ? (il faut toujours que je visualise le cone ...)
    2 / comment faire pour que les deux zones (bleu et jaune) soient "collé" l'une par rapport à l'autre dans le sens je peux augmenter la taille de l'une par rapport à l'autre,la redimensionner ..


  18. #18
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    1 / je peux toujours mettre un QmdiArea dans la zone jaune ou non ? (il faut toujours que je visualise le cone ...)
    Bien sur, mais si on utilise un mdiArea c'est qu'on à l'intention d'utiliser plusieurs sous-fenêtres.

    2 / comment faire pour que les deux zones (bleu et jaune) soient "collé" l'une par rapport à l'autre dans le sens je peux augmenter la taille de l'une par rapport à l'autre,la redimensionner ..
    J'ai l'impression que ce qu'il te faudrait c'est un dock. Si je prend par exemple la première image que tu as posté, ce qui est utilisé sur le coté gauche c'est un dock:

    http://www.developpez.net/forums/att...export_iv.gif/

    Il faut voir du coté de QDockWidget. L'avantage c'est que tu peux redimensionner voire déplacer ce dock à ta convenance.

    Donc si je reprend ce que tu veux:
    afficher deux zone redimensionables. La zone à droite serait une mdiArea. Le menu serait unique.

    Résultat en pièce jointe, dans la première c'est avec deux sous-fenêtres, la deuxième c'est avec l'une des sous fenêtres maximisée.
    Images attachées Images attachées   

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    oui enfait c'est ca !! le truc bleu est un dock c'est ca ?
    (comme tu l'as surement remarqué je commence avec Qt )
    tu penses que je devrais aussi passer en qt designer (ou creator ) ?
    ps : je travaille avec visual c++,et je compile via le compilo de VS c'est à dire sans qmake ou autre,mais plutot en faisant l'edition de lien avec qtgui4.lib qtcore4.lib etc..
    on m'a toujours dit d'utiliser le .pro et qmake,mais j'ai peur que je puisse pas utiliser ca avec ma librairie graphique inventor :/

  20. #20
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    Je ne saurais te conseiller pour ce qui est du passage à QtCreator. Le truc c'est de bien savoir faire ses interfaces graphiques à "mano" avant d'utiliser le Designer.
    Mais QtCreator te permet quand même de faire des projets sans utiliser le Designer (ce qui était le cas ici pour moi).
    Bref, c'est comme tu le sent ou comme ta bibliothèque le sent aussi.

    Pour QDockWidget:
    D'abord le créer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QDockWidget *dock = new QDockWidget(this);
    QWidget *dockContent = new QWidget(); //le contenu du Dock
    dock->setWidget(dockContent); //on assigne ce contenu a notre dock
    this->addDockWidget(Qt::LeftDockWidgetArea,dock);//Placer le dock à gauche
    On remplit le widget assigné au dock:
    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
     
           //remplissage du dock
        QGridLayout *gridLayout = new QGridLayout();
        dockContent->setLayout(gridLayout);
     
        QLineEdit *test1LineEdit = new QLineEdit;
        QLineEdit *test2LineEdit = new QLineEdit;
        QLineEdit *test3LineEdit = new QLineEdit;
     
        QLabel *test1Label = new QLabel(("&test1:"));
        test1Label->setBuddy(test1LineEdit);
        QLabel *test2Label = new QLabel(("&test2:"));
        test2Label->setBuddy(test2LineEdit);
        QLabel *test3Label = new QLabel(("&test3:"));
        test3Label->setBuddy(test3LineEdit);
     
        gridLayout->addWidget(test1Label, 0, 0);
        gridLayout->addWidget(test1LineEdit, 0, 1);
        gridLayout->addWidget(test2Label, 1, 0);
        gridLayout->addWidget(test2LineEdit, 1, 1);
        gridLayout->addWidget(test3Label, 2, 0);
        gridLayout->addWidget(test3LineEdit, 2, 1);
    Pour ce qui est du mdiArea, il suffit d'en désigner un comme étant le Widget Central du MainWindow, ce qu'on a déjà fait avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        QMdiArea *mdiArea = new QMdiArea;
        setCentralWidget(mdiArea);
     
        // déclaration d'une sous-fenêtre
        QWidget *subWindow = new QWidget;
        mdiArea->addSubWindow(subWindow);
     
        // exemple de remplissage du subWindow:    
        QLabel *label = new QLabel("mon graphique ici");
     
        QVBoxLayout *lay_subWindow = new QVBoxLayout(subWindow);        
        lay_subWindow->addWidget(label);
     
        subWindow->setLayout(lay_subWindow);
    Au total ça donne:
    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
    void	CMainWindow::liste_butons()
    {
     
    //DOCK:
        QDockWidget *dock = new QDockWidget(this);
        QWidget *dockContent = new QWidget(); //le contenu du Dock
        dock->setWidget(dockContent); //on assigne ce contenu a notre dock
        this->addDockWidget(Qt::LeftDockWidgetArea,dock);
     
           //remplissage du dock
        QGridLayout *gridLayout = new QGridLayout();
        dockContent->setLayout(gridLayout);
     
        QLineEdit *test1LineEdit = new QLineEdit;
        QLineEdit *test2LineEdit = new QLineEdit;
        QLineEdit *test3LineEdit = new QLineEdit;
     
        QLabel *test1Label = new QLabel(("&test1:"));
        test1Label->setBuddy(test1LineEdit);
        QLabel *test2Label = new QLabel(("&test2:"));
        test2Label->setBuddy(test2LineEdit);
        QLabel *test3Label = new QLabel(("&test3:"));
        test3Label->setBuddy(test3LineEdit);
     
        gridLayout->addWidget(test1Label, 0, 0);
        gridLayout->addWidget(test1LineEdit, 0, 1);
        gridLayout->addWidget(test2Label, 1, 0);
        gridLayout->addWidget(test2LineEdit, 1, 1);
        gridLayout->addWidget(test3Label, 2, 0);
        gridLayout->addWidget(test3LineEdit, 2, 1);
     
     
    //WIDGET CENTRAL:
        QMdiArea *mdiArea = new QMdiArea;
        setCentralWidget(mdiArea);
     
        // déclaration d'une sous-fenêtre
        QWidget *subWindow = new QWidget;
        mdiArea->addSubWindow(subWindow);
     
        // exemple de remplissage du subWindow:    
        QLabel *label = new QLabel("mon graphique ici");
     
        QVBoxLayout *lay_subWindow = new QVBoxLayout(subWindow);        
        lay_subWindow->addWidget(label);
     
        subWindow->setLayout(lay_subWindow);
     
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2011, 10h57
  2. Réponses: 4
    Dernier message: 25/02/2010, 15h22
  3. Réponses: 2
    Dernier message: 29/12/2008, 18h49
  4. Réponses: 1
    Dernier message: 09/07/2008, 15h54
  5. [CR9][RAS] Publication d'états,paramètre et connexion BD
    Par youl dans le forum Connectivité
    Réponses: 4
    Dernier message: 10/01/2005, 10h20

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