Bonjour,
Je cherche à coder une barre gauche verticale contenant des images. l'appui sur une image de cette barre générant l'affichage d'un widget différent dans la partie centrale de l'application.
Un peu comme la barre gauche que l'on trouve sur Qt creator :
Je n'ai pas trouvé de widget déjà existant pour cet élément.
Du coup, pour le moment, je suis parti sur l'idée d'une QToolBar contenant des QLabel.
Est ce que cette conception semble judicieuse ? y a t'il des widget plus pertinent pour réaliser cet élément ?
Pour le moment, j'ai du mal à gérer un affichage correct des images dans le widget. J'ai essayé différentes solutions pour les dimensionner correctement mais sans succès.
il me reste aussi à coder la gestion des actions sur des clicks souris afin de faire afficher le bon widget au centre de mon application.
le code :
gestion des QLabel .h:
le .cpp associé :
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 #ifndef ELEMTOOLBAR_H #define ELEMTOOLBAR_H #include <QtDebug> #include <QWidget> #include <QVBoxLayout> #include <QToolBar> #include <QIcon> #include <QLabel> #include <QSize> #include <QPixmap> #include <QImage> class ElemToolBar : public QWidget { Q_OBJECT public: ElemToolBar(QString, QWidget *parent=0); private: QLabel *lblToolBar; QSize *imageSize; QImage *imageToDisplay; QPixmap *pixmapToDisplay; }; #endif // ELEMTOOLBAR_H
le .h du widget ToolBar :
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 #include "elemtoolbar.h" ElemToolBar::ElemToolBar(QString iconFilePath,QWidget *parent) : QWidget(parent) { lblToolBar = new QLabel("Test"); //lblToolBar->adjustSize(); imageSize = new QSize(200,200); pixmapToDisplay = new QPixmap(*imageSize); imageToDisplay = new QImage(iconFilePath); pixmapToDisplay->fromImage(*imageToDisplay); pixmapToDisplay->scaled(200,200); //lblToolBar->setPixmap(*pixmapToDisplay); lblToolBar->setPixmap(QPixmap(iconFilePath).scaled(100,100)); imageSize = new QSize(100,100); lblToolBar->setMaximumSize(*imageSize); lblToolBar->isVisible(); QVBoxLayout *velayout = new QVBoxLayout(this); velayout->addWidget(lblToolBar); }
et le .cpp associé:
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 #ifndef LEFTTABWIDGET_H #define LEFTTABWIDGET_H #include <QtDebug> #include <QWidget> #include <QVBoxLayout> #include <QToolBar> #include <QIcon> #include "elemtoolbar.h" class lefttabwidget : public QWidget { Q_OBJECT public: lefttabwidget(QWidget *parent=0); private: QToolBar *LeftToolBar; ElemToolBar *Elem1; ElemToolBar *Elem2; ElemToolBar *Elem3; ElemToolBar *Elem4; }; #endif // LEFTTABWIDGET_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 #include "lefttabwidget.h" lefttabwidget::lefttabwidget(QWidget *parent) : QWidget(parent) { // définition des éléments QIcon Elem1 = new ElemToolBar("C:\\Dev\\Jigsaw_v2_proto2\\Ressources\\train.ico"); Elem2 = new ElemToolBar("C:\\Dev\\Jigsaw_v2_proto2\\Ressources\\database.ico"); Elem3 = new ElemToolBar("C:\\Dev\\Jigsaw_v2_proto2\\Ressources\\SPPDemo.png"); Elem4 = new ElemToolBar("C:\\Dev\\Jigsaw_v2_proto2\\Ressources\\G1.jpg"); LeftToolBar = new QToolBar(); LeftToolBar->addWidget(Elem1); LeftToolBar->addSeparator(); LeftToolBar->addWidget(Elem2); LeftToolBar->addSeparator(); LeftToolBar->addWidget(Elem3); LeftToolBar->addSeparator(); LeftToolBar->addWidget(Elem4); LeftToolBar->addSeparator(); //QMainWindow::addToolBar ou QMainWindow::insertToolBar LeftToolBar->setOrientation(Qt::Vertical); QVBoxLayout *vtlayout = new QVBoxLayout(this); vtlayout->addWidget(LeftToolBar); }
Est-il possible de forcer un dimensionnement automatique des images pour que tous les éléments de la tool bar soit visible dans la fenêtre de l'application ?
Merci pour vos conseils :-)
Partager