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 :

Ouverture d'une seconde interface


Sujet :

Qt

  1. #1
    Membre à l'essai
    Ouverture d'une seconde interface
    Bonjour Je conçois une IHM avec qt et je voudrais ouvrir une deuxième interface (partie forms) lorsque l'on clique sur un bouton.
    j'ai commencé à écrire ce code et cela m'indique une erreur

    .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
    24
    25
    26
    27
    28
    29
    #ifndef GLWIDGET_H
    #define GLWIDGET_H
     
    #include <QGLWidget>
    #include<QObject>
     
     
    QT_BEGIN_NAMESPACE
    namespace fenetre { class GLWidget; }
    QT_END_NAMESPACE
    class GlWidget : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit GlWidget(QWidget *parent=0);
        void initializeGL();
        void paintGL();
        void resizeGL(int w, int h);
        int blackLight[4]={0, 0, 0, 1};
        int whitLight[4]={0, 0, 0, 1};
        int LightGrey[4]={63, 63, 63, 1};
        int DarkGrey[4]={150, 150, 150, 1};
     
    private:
        fenetre::GLWidget *ui;
     
    };
     
    #endif // GLWIDGET_H


    .cpp

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "glwidget.h"
    #include"QGLWidget"
    #include "widget.h"
    #include "ui_widget.h"
     
    GlWidget::GlWidget(QWidget *parent):
        QGLWidget(parent),
        ui(new fenetre ::GLWidget)
     
    {
    }


    ma premiere classe s'apelle widget et ma seconde glwidget j'ai essayé d'ajouter la librairie "ui_glwidget.h" mais cela m'indique une erreur.

    voici l'erreur :

    erreur : invalid use of incomplete type 'class fenetre::GLWidget'
    ui(new fenetre ::GLWidget)
    ^~~~~~~~

  2. #2
    Modérateur

    Bonsoir,

    Tu ne dois pas modifier les noms de la classe provenant du Designer et de son namespace Ui qui sont automatiquement générés à chaque modification de l'interface (dans le fichier ui_widget.h inclus dans le .cpp. Il faut les garder tels quels.
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

  3. #3
    Membre à l'essai
    j'ai renommé "fenetre" en Ui quelle librairie dois-je ajouter dans mon cpp #include "ui_widget.h" ou #include "ui_glwidget.h" (nom de mes deux classes).

    voici maintenant mon .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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #ifndef GLWIDGET_H
    #define GLWIDGET_H
     
    #include <QGLWidget>
    #include<QObject>
     
     
    QT_BEGIN_NAMESPACE
    namespace Ui { class GLWidget; }
    QT_END_NAMESPACE
    class GlWidget : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit GlWidget(QWidget *parent=0);
        void initializeGL();
        void paintGL();
        void resizeGL(int w, int h);
     
        int blackLight[4]={0, 0, 0, 1};
        int whitLight[4]={0, 0, 0, 1};
        int LightGrey[4]={63, 63, 63, 1};
        int DarkGrey[4]={150, 150, 150, 1};
     
    private:
       // QVector<QVector3D> m_vertices;
        //int vertices_by_x;
        //int vertices_by_y;
        //int vertices_by_z;
        //int quads_by_x;
        //int quads_by_y;
        Ui::GLWidget *ui;
     
    };
     
    #endif // GLWIDGET_H



    et mon cpp

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "glwidget.h"
    #include"QGLWidget"
    #include "widget.h"
     
     
    GlWidget::GlWidget(QWidget *parent):
        QGLWidget(parent),
        ui(new Ui::GLWidget)
    {
    }


    j'ai toujours la même erreur, pourrais je avoir accès à l'option forms en faisant cette méthode ?

  4. #4
    Modérateur

    À toi de voir laquelle tu souhaites utiliser ici, mais vu le nom, je dirais ui_glwidget.h .
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

  5. #5
    Membre à l'essai
    je souhaite utilisé ma classe widget quand je compile mon programme et faire appelle a ma classe qlwidget quand j'appuie sur un bouton, quand j'inclus la librairie il me dis qu'il n'y a aucun fichier ou repertoire de ce nom

  6. #6
    Membre éclairé
    Bonjour,je ne sais pas ce que tu veux faire, mais normalement tu rends (to render) des graphiques opengl donc de la 3D dans un QGLWidget donc tu ne dois pas mettre d'ui dedans.
    Les ui sont faites pour mettre des contrôles de QWidgets
    Cette classe QGLWidget est d'ailleurs obsolète,il faut utiliser QOpenGlWindow ou QOpenGlWidget si tu veux faire de la 3D dedans