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 :

Activer une QScrollArea pour afficher une image


Sujet :

Qt

  1. #1
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut Activer une QScrollArea pour afficher une image
    Bonjour,

    J'ai un petit soucis pour activer ma QScrollArea sur mon image. Voici ma situation plus en détail.

    J'ai une image de taille 1134 x 1143 et ma fenêtre fait 1024 x 768. J'ai plusieurs QWidgets dans ma fenêtre dont une QScrollArea qui contient un QLabel qui est mon image. Lors du démarrage mon image s'adapte juste à la taille de ma QScrollArea, jusque là pas de problème.

    Ensuite j'ai 3 boutons sur le côté (1 pour zoomer, 1 pour dézoomer et 1 pour redonner sa taille normale à mon image). Mais lorsque je clique sur n'importe lequel de ces boutons il n'y a strictement rien qui se passe

    Voici 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
    #ifndefFENMAP_H
    #defineFENMAP_H
    #include<QtGui>
    #include"ui_fenetre.h"
    
    class FenMap : public QWidget, private Ui::FenMap {
        Q_OBJECT
        
        private:
            QLabel* imageLabel;
            double scaleFactor;
            
            void adjustScrollBar (QScrollBar* scrollBar, double factor);
            void scaleImage (double factor);
    
        public:
            FenMap (QWidget* parent = 0);
    
        privateslots:
            void on_button_clicked ();
            void on_zoomIn_clicked ();
            void on_zoomOut_clicked ();
            void on_normalSize_clicked ();
    };
    
    #endif//FENMAP_H
    Mon .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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include"include/FenMap.h" 
    
    FenMap::FenMap (QWidget* parent) : QWidget (parent) {
        setupUi (this);
        QImage img ("../files/metro.bmp");
        this->imageLabel = newQLabel;
        this->imageLabel->setBackgroundRole (QPalette::Base);
        this->imageLabel->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored);
        this->imageLabel->setScaledContents (true);
        this->imageLabel->setPixmap (QPixmap::fromImage (img));
        this->scaleFactor = 1.0;
        this->map->setBackgroundRole (QPalette::Dark);
        this->map->setWidget (imageLabel);
        this->map->setWidgetResizable (true);
    }
    
    void FenMap::on_button_clicked () {
        this->textArrival->setPlainText ("blablz");
    }
    
    void FenMap::adjustScrollBar (QScrollBar* scrollBar, double factor) {
        scrollBar->setValue (int (factor*scrollBar->value () + ((factor-1) * scrollBar->pageStep () / 2)));
    }
    
    void FenMap::on_zoomIn_clicked () {
        this->scaleImage (1.25);
    }
    
    void FenMap::on_zoomOut_clicked () {
        this->scaleImage (0.8);
    }
    
    void FenMap::on_normalSize_clicked () {
        this->imageLabel->adjustSize ();
        this->scaleFactor = 1.0;
    }
    
    void FenMap::scaleImage (doublefactor) {
        Q_ASSERT (imageLabel->pixmap ());
        this->scaleFactor *= factor;
        this->imageLabel->resize (this->scaleFactor * this->imageLabel->pixmap ()->size ());
        this->adjustScrollBar (this->map->horizontalScrollBar (), factor);
        this->adjustScrollBar (this->map->verticalScrollBar (), factor);
    }
    Petites infos sur mon code, l'attribut "map" est ma QScrollArea. J'utilise les Auto-Connect car mon interface est créé avec QTDesigner.

    Auriez-vous une idée de ce que j'ai fait de traver ?

    Merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 885
    Points : 219 336
    Points
    219 336
    Billets dans le blog
    123
    Par défaut
    Bonjour,

    Euh, je ne vois pas les connect() afin de brancher les boutons à leurs actions ...
    Sinon, il y a peut être un message dans la console de Qt (on ne sait jamais)

  3. #3
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Comme précisé, j'utilise les "Auto-Connect" car mon interface est faite avec QTDesigner donc pas besoin de mettre les connect() il suffit juste de respecter un modèle de nom pour les slots comme je l'ai fait.

    Sinon non il n'y a rien dans la console

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 885
    Points : 219 336
    Points
    219 336
    Billets dans le blog
    123
    Par défaut
    Citation Envoyé par snake264 Voir le message
    Comme précisé, j'utilise les "Auto-Connect" car mon interface est faite avec QTDesigner donc pas besoin de mettre les connect() il suffit juste de respecter un modèle de nom pour les slots comme je l'ai fait.

    Oui désolé

    void FenMap::on_button_clicked () {
    this->textArrival->setPlainText ("blablz");
    }
    Et j'imagine que cela s'affiche à chaque clique sur un bouton ? Et que si on rajoute un truc du genre pour chaque fonction de redimenssionnement, cela affichera un texte de debug ?

    void FenMap::on_normalSize_clicked () {
    this->imageLabel->adjustSize ();
    this->scaleFactor = 1.0;
    }
    Et faire un refresh() ou update() ou repaint() (j'a oublié le nom), cela pourrait aidé, non ?

  5. #5
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Et j'imagine que cela s'affiche à chaque clique sur un bouton ?
    Oui.

    Citation Envoyé par LittleWhite Voir le message
    Et que si on rajoute un truc du genre pour chaque fonction de redimenssionnement, cela affichera un texte de debug ?
    Oui. Mais quoi ?

    Citation Envoyé par LittleWhite Voir le message
    Et faire un refresh() ou update() ou repaint() (j'a oublié le nom), cela pourrait aidé, non ?
    Déjà essayé mais ne marche pas

  6. #6
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    Problème résolu, il suffisait de rajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QSizeAdjustSize=img.size();
    this->imageLabel->setMinimumSize(AdjustSize);

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

Discussions similaires

  1. Lien dans un frame d'une cadre pour ouvrir une autre page sur une même fenêtre
    Par maelislah dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 27/06/2015, 20h39
  2. PHP/FLASH récupérer une variable pour afficher une image dans un clip
    Par Touillette85 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/12/2008, 10h02
  3. Affiché une box pour poser une question
    Par satanas dans le forum Forms
    Réponses: 1
    Dernier message: 16/05/2008, 11h52
  4. Réponses: 3
    Dernier message: 03/11/2007, 21h47
  5. créer une zone pour afficher une BMP scrollable
    Par hansaplast dans le forum wxWidgets
    Réponses: 15
    Dernier message: 14/03/2006, 09h25

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