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:cry:
Voici mon .h :
Code:
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:
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 :)