Problème de redimensionnement de fenêtre avec Qt
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Problème de redimensionnement de fenêtre avec Qt



  1. #1
    foudefoot

    Problème de redimensionnement de fenêtre avec Qt


    ------

    Bonjour à tous le forum,

    Le petit programme que j'écris est sensé augmenter la largeur d'une fenêtre à l'aide d'un curseur. Le code que j'écris ne fonctionne pas. Après 2 jours de bidouillage du code, je n'arrive pas à la faire fonctionner, quelqu'un peut-il m'aider?
    voici les fichiers:

    Le header "MaFenetre.h":
    Code:
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QLCDNumber>
    #include <QSlider>
    #include <QObject>
    
    class MaFenetre : public QWidget
    {
        // Nom de la macro tout en majuscule
        // Prépare le compilateur à accepter un nouveau mot-clé (slot)
        Q_OBJECT
    public:
        MaFenetre();
    
        // Nouveau mot-clé (slot)
    public slots:
        void changerLargeur(int largeur);
    
    private:
        QSlider *m_slider;
    };
    
    #endif // MAFENETRE_H
    Le fichier "MaFenetre.cpp":
    Code:
    #include "mafenetre.h"
    #include <QObject>
    
    
    void MaFenetre::changerLargeur(int largeur)
    {
        setFixedSize(largeur, 100);
    }
    
    MaFenetre::MaFenetre() : QWidget()
    {
        setFixedSize(200, 100);
    
          // Construction du bouton
        m_slider = new QSlider(Qt::Horizontal, this);
        m_slider->setRange(200, 900);
        m_slider->setGeometry(10, 60, 150, 20);
    
    
    
         // Connexion, on affiche la valeur du curseur
         // par rapport au slider
         QObject::connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(changerLargeur(int)));
    
    }
    Et le fichier "main.cpp":
    Code:
    #include "mainwindow.h"
    #include "MaFenetre.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MaFenetre fenetre;
        fenetre.show();
    
        return a.exec();
    }
    Le message d'erreur:
    Code:
    Démarrage de F:\Projet_Qt_creator\build-Creer_Ses_Propres_Signaux_Et_Slots-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\Creer_Ses_Propres_Signaux_Et_Slots.exe...
    QObject::connect: No such slot QWidget::changerLargeur(int) in ...
    \Creer_Ses_Propres_Signaux_Et_Slots\mafenetre.cpp:23
    F:\Projet_Qt_creator\build-Creer_Ses_Propres_Signaux_Et_Slots-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\Creer_Ses_Propres_Signaux_Et_Slots.exe s'est terminé avec le code 0
    L'erreur me pointe cette ligne:
    "QObject::connect(m_slider , SIGNAL(valueChanged(int)), this, SLOT(changerLargeur(int)));"

    Merci pour vos réponses a venir.
    Denis

    -----

  2. #2
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    Salut, il devrait marcher ce programme. Que contient mainwindow.h ?

  3. #3
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Bonjour et merci de ta réponse satinas,

    Je ne peux pas te réponde avec exactitude car je suis au boulot jusqu'à 20h, mais c'est le mainwindow.h d'origine. Je ne change jamais les paramètres de ce header. Lorsque je compile le programme, tout s'affiche correctement, mais lorsque je bouge le curseur la fenêtre reste à la dimension 200*600. Dès que je rentre, je t'envoie le mainwindow.h.
    Merci.
    Denis
    P.S: Ma version de Qt est la 5.

  4. #4
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Voici le mainwindow.h
    Code:
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    Voici le mainwindow.ccp
    Code:
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    Denis

  5. A voir en vidéo sur Futura
  6. #5
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    D'après ce que je vois et que j'ai compris, tu as créé 2 classes :

    - une classe MainWindow (fenêtre application avec menu, statusbar, toolbar)
    sans doute par créaation projet Qt, en choisissant QMainWindow, et en cochant "générer interface graphique"

    - une classe MaFenetre ajoutée à la main, qui est une QWidget avec son slider

    Le problème est que tu ne crée pas d'objet MainWindow.
    Par contre dans ton main tu crées un objet MaFenetre, qui s'affiche correctement. le connect permettant d'associer toute manipulation du slider à un resize de ta fenêtre. Et ça me semble bon.
    Si tu ne voulais pas de MainWindow, il faut commenter l'include mainwindow.h dans ton main, et enlever du .pro tous les fichiers relatifs à MainWindow. Ensuite recompiler.
    Cela aurait été plus simple de créer un projet Qt en spécifiant que tu voulais une fenêtre principale de type QWidget au lieu de QMainWindow

    Si tu voulais vraiment une MainWindow, alors faut en reparler ...

    PS j'aime pas utiliser les ui, je préfère faire mes layouts à la main

  7. #6
    Jack
    Modérateur

    Re : Problème de redimensionnement de fenêtre avec Qt

    Citation Envoyé par foudefoot Voir le message
    Bonjour à tous le forum,

    Le petit programme que j'écris est sensé augmenter la largeur d'une fenêtre à l'aide d'un curseur. Le code que j'écris ne fonctionne pas. Après 2 jours de bidouillage du code, je n'arrive pas à la faire fonctionner, quelqu'un peut-il m'aider?
    voici les fichiers:

    Le header "MaFenetre.h":
    Code:
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QLCDNumber>
    #include <QSlider>
    #include <QObject>
    
    class MaFenetre : public QWidget
    {
        // Nom de la macro tout en majuscule
        // Prépare le compilateur à accepter un nouveau mot-clé (slot)
        Q_OBJECT
    public:
        MaFenetre();
    
        // Nouveau mot-clé (slot)
    public slots:
        void changerLargeur(int largeur);
    
    private:
        QSlider *m_slider;
    };
    
    #endif // MAFENETRE_H
    Le fichier "MaFenetre.cpp":
    Code:
    #include "mafenetre.h"
    #include <QObject>
    
    
    void MaFenetre::changerLargeur(int largeur)
    {
        setFixedSize(largeur, 100);
    }
    
    MaFenetre::MaFenetre() : QWidget()
    {
        setFixedSize(200, 100);
    
          // Construction du bouton
        m_slider = new QSlider(Qt::Horizontal, this);
        m_slider->setRange(200, 900);
        m_slider->setGeometry(10, 60, 150, 20);
    
    
    
         // Connexion, on affiche la valeur du curseur
         // par rapport au slider
         QObject::connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(changerLargeur(int)));
    
    }
    Et le fichier "main.cpp":
    Code:
    #include "mainwindow.h"
    #include "MaFenetre.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MaFenetre fenetre;
        fenetre.show();
    
        return a.exec();
    }
    Le message d'erreur:
    Code:
    Démarrage de F:\Projet_Qt_creator\build-Creer_Ses_Propres_Signaux_Et_Slots-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\Creer_Ses_Propres_Signaux_Et_Slots.exe...
    QObject::connect: No such slot QWidget::changerLargeur(int) in ...
    \Creer_Ses_Propres_Signaux_Et_Slots\mafenetre.cpp:23
    F:\Projet_Qt_creator\build-Creer_Ses_Propres_Signaux_Et_Slots-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\Creer_Ses_Propres_Signaux_Et_Slots.exe s'est terminé avec le code 0
    L'erreur me pointe cette ligne:
    "QObject::connect(m_slider , SIGNAL(valueChanged(int)), this, SLOT(changerLargeur(int)));"

    Merci pour vos réponses a venir.
    Denis
    J'ai copié ton code et ça compile parfaitement.

    L'exécution fonctionne parfaitement également.

    Bizarre ...

  8. #7
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    Le méta object compiler se fait parfois des noeuds quand les sources sont un peu trop torturés

  9. #8
    Jack
    Modérateur

    Re : Problème de redimensionnement de fenêtre avec Qt

    Peut-être, mais en principe le même code avec le même compilateur devraient donner le même résultat

    En passant:
    F:\Projet_Qt_creator\build-Creer_Ses_Propres_Signaux_Et_S lots-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\Creer_Ses_Propres_ Signaux_Et_Slots.exe
    Ca c'est du path

  10. #9
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Bonjour et merci à vous 2,

    Je débute en C++, et je commence juste à compiler des programmes avec Qt. Ceci explique mes grosses erreurs et problèmes de compilation. J'ai quelques questions:

    -> satinas:

    Code:
     une classe MainWindow (fenêtre application avec menu, statusbar, toolbar)
    sans doute par créaation projet Qt, en choisissant QMainWindow, et en cochant "générer interface graphique"
    j'ai fait comme cela dans mes 4 programmes précédents et ça fonctionnait toujours bien.

    Code:
    Si tu ne voulais pas de MainWindow, il faut commenter l'include mainwindow.h dans ton main, et enlever du .pro tous les fichiers relatifs à MainWindow. Ensuite recompiler.
    Comment fait-on cela?

    Code:
    Si tu voulais vraiment une MainWindow, alors faut en reparler ...
    Je veux bien que tu m'explique comment faire, car je ne sais pas faire sans mainwindow...
    ->Jack:

    Code:
    Ca c'est du path
    Je sais, mais comme je débute, mettre dans le nom du programme ce que fait celui-ci m'aidera plus tard à retrouver une info sur comment faire tel ou tel chose.

    Je vous mets en pièce jointe un programme précédent qui fonctionne bien, il permet d'afficher la progression du slider.

    En tous cas, merci pour vos réponses.
    Denis
    Fichiers attachés Fichiers attachés

  11. #10
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Je viens de recompiler mon programme pour la 3ième fois de la matinée et miracle il fonctionne. Je pense donc que c'est le compilateur qui merdouille. Je vais désinstaller puis réinstaller Qt pour voir si le problème persiste.
    Par contre mes questions reste toujours valable, si vous voulez bien prendre le temps d'y répondre, je suis preneur.
    Merci.
    Denis

  12. #11
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    Ce n'est pas nécessaire d'installer à nouveau Qt. Il y a plusieurs '"compilateurs" qui entrent en jeu l'un après l'autre, et il peut y a voir des problèmes de cohérence des fichiers objets et intermédiaires.
    En nettoyant juste une fois le dossier de compilation, avant la compilation, il aurait sans doute disparue, et il est rare.

    Lorsque tu crées une application, tu choisis la classe de ta fenêtre principale, QWidget ou QDialog ou QMainWindow (voir docs Qt), et Qt te crée l'appli qui contient la classe, et un main qui l'instancie. Dans ton cas, il suffisait de créer l'application en choisissant la classe QWidget, et ensuite juste d'ajouter à la fenêtre le slider et son slot.

    Lorsque tu crées une application, si tu coches "générer interface graphique", il te crée un fichier ui définissant l'aspect graphique de la fenêtre. Ce fichier est éditable avec l'utilitaire graphique Qt Designer. Je n'utilises pas cette option.

    Le fichier mon_appli.pro est l'équivalent d'un fichier make, il est utilisé par le compilateur pour savoir quels fichiers compiler et quelles librairies intégrer. Il est mis a jour automatiquement par Qt, lorsque par menu on crée l'appli ou on ajoute des classes, mais on peut aussi le modifier à la main directement.

  13. #12
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    oups oups oups
    Dernière modification par satinas ; 26/06/2014 à 10h28.

  14. #13
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Code:
    En nettoyant juste une fois le dossier de compilation, avant la compilation, il aurait sans doute disparue, et il est rare.
    Je m'en servirais si cela recommence.

    Code:
    Lorsque tu crées une application, si tu coches "générer interface graphique", il te crée un fichier ui définissant l'aspect graphique de la fenêtre. Ce fichier est éditable avec l'utilitaire graphique Qt Designer. Je n'utilises pas cette option.
    Je pensais que c'était obligatoire pour pouvoir gérer une interface graphique.

    Code:
    Le fichier mon_appli.pro est l'équivalent d'un fichier make, il est utilisé par le compilateur pour savoir quels fichiers compiler et quelles librairies intégrer. Il est mis a jour automatiquement par Qt, lorsque par menu on crée l'appli ou on ajoute des classes, mais on peut aussi le modifier à la main directement.
    Il me senblait que les librairies étaient intégrées lorsque l'on ajouté les "#include".

    Maintenant je commence à mieux comprendre le fonctionnement de Qt.

    Merci à vous deux.
    Denis

  15. #14
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    Ta classe MaFenetre était un exemple de fenêtre graphique réalisée par ton code, et sans fichier ui. Avec l'instruction setGeometry() tu as placé et dimensionné le slider dans la fenêtre MaFenetre. On fait pareil avec Qt Designer mais avec la souris. Je trouve plus facile pour la maintenance d'avoir une fenêtre agencée par des lignes de code écrites de ma main plutôt qu'avec un utilitaire, mais c'est une réflexion perso.

    Pour organiser la disposition des fenêtres, on utilise des layout, voir les classes QHboxLayout QVboxLayout, QGridLayout

    le mot "intégrer" n'est pas bon, en fait en compilation Qt dynamique, les librairies restent à l'intérieur de l'exe.
    Dans le fichier .pro d'une application graphique, on déclare l'utilisation des librairies core, gui et widgets. Ce qui permet de placer dans les sources les includes vers les classes de ces librairies. Le code des librairies est dans les fichiers Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll, ... qu'il faudra trimballer avec ton exe, compter 30MB en tout

  16. #15
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    que de fautes, lire "les librairies restent à l'extérieur de l'exe"

  17. #16
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Ok, merci à toi pour tous ces renseignements.
    Une dernière question, si j'ai bien compris, les histoires d'héritage de classe, toutes classes sont héritées de "QGUI", donc pourquoi mettre que les "#include" nécessaire et ne pas mettre "#include <QGui>" directement et ainsi éviter de nombreux oublis, surtout lorsqu'on débute...
    Denis

  18. #17
    satinas

    Re : Problème de redimensionnement de fenêtre avec Qt

    QtGui n'est pas une classe, c'est un module qui contient ce qu'il faut pour faire une application graphique interactive. Dans les dernières versions de Qt, ils ont eu la bonne idée de placer dans le fichier texte "QtGui" tous les includes (et il y en a beaucoup) du module, c'est tout.
    QtWidgets a été sorti de QtGui depuis la version 5, et il fait de même.
    Idem pour les autres modules network, multimedia, ...

    pour une appli graphique, il suffit de mettre
    #include <QtGui> // qui d'ailleurs fait un include QtCore
    #include <QtWidgets>

    Les 2 classes importantes de Qt sont
    - QObject et sa relation parent-enfant qui simplifie la gestion mémoire
    - QWidget qui est l'entité graphique interactive de base

    Sus aux tutos

  19. #18
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    Ok, merci.
    Je vais potasser les tutos.
    Denis

  20. #19
    Jack
    Modérateur

    Re : Problème de redimensionnement de fenêtre avec Qt

    je te recommande les vidéos dont je t'ai parlé plus haut. C'est très ciblé à chaque fois.
    Dernière modification par Jack ; 28/06/2014 à 17h12.

  21. #20
    foudefoot

    Re : Problème de redimensionnement de fenêtre avec Qt

    J'y ai jeté un œil, même si mon anglais est un peu rouillé, il est vrai que c'est très ciblé.
    Merci.
    Denis

Discussions similaires

  1. redimensionnement image
    Par raph000000 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 26/06/2012, 13h32
  2. Probleme de pose fenetre pvc avec le coffre du volet
    Par Lakam dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 3
    Dernier message: 19/09/2008, 08h14
  3. redimensionnement image avec Gimp et insertion sous LaTeX
    Par invite1bc1ddb5 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 13/01/2008, 23h23
  4. Problème de fenêtre avec firefox
    Par inviteee3dd1c2 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 7
    Dernier message: 18/05/2006, 21h50