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 :

Comment combiner un QDockWidget et un MainWindow


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Comment combiner un QDockWidget et un MainWindow
    Bonjour,

    Le système est bien avancé depuis ma précédente demande portant sur la connexion HID, mais je bute sur une amelioration du GUI.
    En effet, le grand nombre de commandes/configurations nécessaire pour faire fonctionner l'ensemble m'impose de créer plusieurs fenêtres secondaires (QDockWidget) associées à une fenêtre principale.
    J'ai bien créé un premier QDockWidget, avec ses fichiers .h et .cpp fournis par Qt creator, mais je ne sais pas comment associer cet element à la fenétre principale, l'objectif étant d'ouvrir ce QDockWidget ( PWMcontroller ) depuis un bouton de la fenêtre principale.
    Compte tenue du nombre de widget inclus dans la QDockWidget (PWMcontroller) , il ne me parait pas aisé de le créer depuis le fichier de la fenêtre principale. C'est aussi un moyen de découper le programme en fichier plus facile à maintenir, permettant l'installation d'autres fonctions sans casser le code principal.
    J'ai lu pas mal de notes sur ce forum, parcouru beaucoup de sites internet, sans trouver l'exemple portant sur ma recherche : seul le cas de lacréation d'un QDockWidget dans la fenêtre principale est décrit, pas l'ajout d'un tel fichier externe. Une aide sur la mèthode serait très apprécié !

    merci, cordialement,

    Michael

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour,

    Voici un exemple qui vous aidera je l'éspère.

    MyDockWidget.h:
    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
    #ifndef MyDockWidget_H
    #define MyDockWidget_H
     
    #include <QDockWidget>
    class QBoxLayout;
     
    #include "switchbutton.h"
     
    class MyDockWidget : public QDockWidget
    {
        Q_OBJECT
    public:
        explicit MyDockWidget(QWidget *parent = 0);
     
    private slots:
        void initGui();
     
        //GUI
    private:
        QBoxLayout *mainLayout;
    };
     
    #endif // MyDockWidget_H
    MyDockWidget.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
    27
    #include <QBoxLayout>
    #include <QLabel>
    #include <QDebug>
    #include <QCoreApplication>
     
    #include "MyDockWidget.h"
     
    MyDockWidget::MyDockWidget(QWidget *parent) :
        QDockWidget(parent)
    {
        initGui();
    }
     
    void MyDockWidget::initGui()
    {
        //Création de la GUI...
        mainLayout = new QBoxLayout(QBoxLayout::LeftToRight);
       ...
       ...
       ...
     
     
        QWidget *w = new QWidget;
        w->setLayout(mainLayout);
     
        setWidget(w);    
    }
    MainWindow.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
    27
    28
    29
    30
    31
    32
    33
    34
    void MainWindow::createMyDockWidget()
    {
        //Dock widget 
        myDockWidget = new MyDockWidget;
        //To be able to use saveState() and restoreState() methods.
        myDockWidget->setObjectName("dockWidget"); 
        myDockWidget->setWindowTitle(tr("My Dock Widget"));
        myDockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
        myDockWidget->setFeatures(QDockWidget::AllDockWidgetFeatures);
     
        //Add to the main window
        addDockWidget(Qt::TopDockWidgetArea, myDockWidget);
     
        //Action qui permet d'afficher/masquer le dock widget, l'action peut être utiliser
        //dans un menu ou une toolbar. 
        actMyDockWidget = myDockWidget->toggleViewAction();
        //on peut lui donner un icône 
        actMyDockWidget->setIcon(QIcon(":/dockWidgetIcon"));
    }
     
    void MainWindow::createToolBar(){
        //Ajout dans une toolbar 
        QToolBar *tb = addToolBar(tr("Tools"));
        // set object name so savestate() works
        tb->setObjectName(tr("ToolsToolBar"));    
        //Ajout de l'action du dock widget
        tb->addAction(actMyDockWidget);
    }
     
    void MainWindow::createMenu(){    
        //Ajout dans un menu 
        QMenu *menu = menuBar()->addMenu(tr("&Menu"));
    	menu->addAction(actMyDockWidget);
    }
    N'hésitez pas si vous avez des questions.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Merci pour les informations : une aide efficace puisque je peux activer le QDockWindow (PWMcontroller.ui) depuis la MainWindow (MainMcuController.ui).
    Toutes les procédures propres au PWMcontroller sont fonctionnelles .
    Reste un point "dur": le traitement du port USB (les données sont au format HID) est réalisé dans le code de la MainWindow. Comment utiliser la routine d'envoi de données depuis le PWMcontroller ? La routine est simple :
    void sendReportToHid(int code1, int code2, int code3, int code4).
    La lecture est aussi simple, mais sur cinq octets en retour du MCU externe.
    Tout ceci fonctionne sans problème en restant dans la classe MainMcuController, néant depuis PWMcontroller ..
    Je continu mes recherches sur le net : pas facile car très "touffu" !
    Merci pour votre aide,
    cordialement

    Michael

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Je pense que la solution est d'utiliser les signaux /slots. Malheureusement je ne suis pas sur un PC la je ne peux pas mettre d'exemple

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Effectivement, le couple SLOT+SIGNALS permet les communications de classe à classe. En me basant sur un exemple pioché sur le web, j'arrive bien à fonctionner partiellement sur un programme simplifié. Nouvelle difficulté : la compilation est sans faute, pas d'erreur, mais pas de communication sur deux des slots. Du temps en perspective ..
    Cordialement,

    Michael

Discussions similaires

  1. [ADO.Net][C#] Comment combiner IDbCommand et procédures stockées ?
    Par L`artiste dans le forum Accès aux données
    Réponses: 7
    Dernier message: 19/08/2011, 16h44
  2. Comment combiner deux classifieurs ?
    Par telecom85 dans le forum Méthodes prédictives
    Réponses: 8
    Dernier message: 04/02/2010, 23h40
  3. comment combiner deux images avec WIA
    Par blondelle dans le forum C++Builder
    Réponses: 0
    Dernier message: 22/05/2009, 14h33
  4. Réponses: 1
    Dernier message: 18/04/2008, 16h11

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