Bonjour, cela quelques temps que je suis sur mon projet et la je bloque. Cela faisait un petit moment que j'avais pas eu le temps de bosser dessus et j'aurais besoin d'un petit peu d'aide.

Je suis en train de développer un programme dans lequel j'aimerais pouvoir intégrer une scroll bar horizontale et verticale dans un widget.

Pour résumer j'ai un widget que j'ai appelé videowidget dans lequel j'ajoute des nouveaux widget en cliquant dans sur un bouton add. Ces widgets se range dans un Grid layout qui se limite a 5 ligne et qui passe a la collone suivante a chaque fois. Comme c'est un grid layout dés qu'il n'y a plus de place il s'entasse. j'aimerais pouvoir intégrer des scroll bar pour que les widget garde un espacement constant et qu'il faille scroller pour accéder a tout les nouveaux widgets.

code mainwindow.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include "MainWindow.h"
#include<iostream>
 
using namespace std;
 
MainWindow::MainWindow()
{
     videonumbercount = 0;
    //collumnumbertemp = 1;
    //this->setWindowState(Qt::WindowFullScreen);
    resize(QDesktopWidget().availableGeometry(this).size() * 0.7);
 
    // Barre de menu
 
    QMenu *menuFichier = menuBar()->addMenu("&Fichier");
 
    QAction *actionNewProject = new QAction("&Nouveau Projet", this);
    menuFichier->addAction(actionNewProject);
 
    QAction *actionOpenProject = new QAction("&Ouvrir Projet", this);
    menuFichier->addAction(actionOpenProject);
 
    QAction *actionRecentFile = new QAction("&Fichiers recent", this);
    menuFichier->addAction(actionRecentFile);
 
    QAction *actionSave = new QAction("&Enregistrer", this);
    menuFichier->addAction(actionSave);
 
    QAction *actionSaveAs = new QAction("&Enregistrer sous", this);
    menuFichier->addAction(actionSaveAs);
 
    QAction *actionQuitter = new QAction("&Quitter", this);
    menuFichier->addAction(actionQuitter);
 
    QMenu *menuEdition = menuBar()->addMenu("&Edition");
 
    QAction *actionAddVideo = new QAction("&Ajouter une Video", this);
    menuEdition->addAction(actionAddVideo);
 
    QAction *actionAddVideos = new QAction("&Ajouter des Videos", this);
    menuEdition->addAction(actionAddVideos);
 
    QAction *actionSupVideos = new QAction("&Supprimez Videos", this);
    menuEdition->addAction(actionSupVideos);
 
    QMenu *menuTool = menuBar()->addMenu("&Outils");
 
    QAction *actionPref = new QAction("&Preferences", this);
    menuTool->addAction(actionPref);
 
 
    // Créations de horizontal splitter
 
    QPalette Pal(palette());
 
 
    videowidget = new QWidget;
    videowidget->setMinimumWidth(500);
 
 
   Pal.setColor(QPalette::Background, Qt::white);
   videowidget->setAutoFillBackground(true);
   videowidget->setPalette(Pal);
 
   videolayout = new QGridLayout;
   //videolayout -> setAlignment(Qt::AlignTop | Qt::AlignLeft);
   videowidget->setLayout(videolayout);
   //videolayout->setContentsMargins(1,1,1,1);
 
 
 
    tabwidget = new QTabWidget;
 
    tabwidget->addTab(new QWidget(),"page 1");
    tabwidget->addTab(new QWidget(),"page 2");
    tabwidget->setMinimumWidth(250);
 
    horizontalsplitter = new QSplitter;
    horizontalsplitter->setContentsMargins(0,0,0,0);
    horizontalsplitter->addWidget(videowidget); // Définition de horizontal splitter
    horizontalsplitter->addWidget(tabwidget);
 
 
    // Création de console
 
 
    console = new QTextEdit;
    console->setMaximumHeight(200);
 
 
   // Créations de mainsplitter
 
    mainsplitter = new QSplitter;
    mainsplitter->setContentsMargins(0,0,0,0);
    mainsplitter->setOrientation(Qt::Vertical);// Définition du main splitter
    mainsplitter->addWidget(horizontalsplitter);
    mainsplitter->addWidget(console);
 
 
    // Création de la side bar
 
    sidebar = new QWidget;
    sidebar->setMaximumWidth(50);
    sidebar->setMinimumWidth(50);
 
 
    preferencebutton = new QPushButton("Preference",this);
    preferencebutton->setMaximumSize(46,46);
    preferencebutton->setMinimumSize(46,46);
 
    addvideobutton = new QPushButton("add video",this);
    addvideobutton->setMaximumSize(46,46);
    addvideobutton->setMinimumSize(46,46);
 
    sidebarspacer = new QSpacerItem(20,40,QSizePolicy::Minimum,QSizePolicy::Expanding);
 
    // Création du layout sidebarloayout
 
    sidebarlayout = new QVBoxLayout;
 
    sidebarlayout->setSpacing(0);
    sidebarlayout->setMargin(0);
    sidebarlayout ->addWidget(preferencebutton);
    sidebarlayout ->addWidget(addvideobutton);
    sidebarlayout ->addSpacerItem(sidebarspacer);
    sidebarlayout->setAlignment(preferencebutton,Qt::AlignCenter);
    sidebarlayout->setAlignment(addvideobutton,Qt::AlignCenter);
 
 
    sidebar->setLayout(sidebarlayout);
 
 
    // Création du widget central
    centralwidget = new QWidget;
 
 
    // Création de Layout principal / Main layout
 
    mainlayout = new QHBoxLayout;
    mainlayout->setSpacing(0);
    mainlayout->setMargin(0);
 
 
    // Définition du mainlayout
 
    mainlayout->addWidget(sidebar);
    mainlayout->addWidget(mainsplitter);
    centralwidget->setLayout(mainlayout);
 
 
    // Définition du widget central
 
    setCentralWidget(centralwidget);
 
    // Connect SIGNAL SLOT
 
    connect(actionAddVideo, SIGNAL(triggered()), this, SLOT(createVideo()));
    connect(addvideobutton, SIGNAL(clicked()), this, SLOT(createVideo()));
    connect(actionAddVideos, SIGNAL(triggered()), this, SLOT(inputDialog()));
 
 
}
 
 
void MainWindow::createVideo()
{
    //collumnumber = collumnumbertemp;
 
    for(int j = rownumber; j == 5; j++){
 
    }
 
    rownumber += 1;
 
    if (rownumber==6){
        rownumber = 1;
        collumnumber+=1;
 
    }
    collumnumbertemp = collumnumber;
 
    Video *video = new Video(videonumbercount+1);
    videolayout->addWidget(video,rownumber,collumnumber);
 
    videonumbercount += 1;
 
 
}
 
void MainWindow::createVideos()
{
 
    for(int i = 0; i <  videonumberinput; i++){
        MainWindow::createVideo();
    }
 
 
}
 
void MainWindow::inputDialog()
{
 
    videonumberinput = QInputDialog::getInt(this, "Ajouter des videos", "Ajouter x videos");
    MainWindow::createVideos();
}
mainwindow.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtWidgets>
#include "Video.h"
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow();
 
public slots :
 
    void createVideo(); // créer un widget vidéo
    void createVideos(); //créer des widgets vidéo
    void inputDialog();
 
 
 
private :
 
 
    QWidget *centralwidget;
    QWidget *sidebar;
    QHBoxLayout *mainlayout;
    QSplitter *mainsplitter;
 
    // mainsplitter
 
    QSplitter *horizontalsplitter;
    QTextEdit *console;
 
 
    // horizontal splitter
 
    QWidget *videowidget;
    QTabWidget *tabwidget;
 
    // side  bar
 
    QPushButton *preferencebutton;
    QPushButton *addvideobutton;
    QVBoxLayout *sidebarlayout;
    QSpacerItem *sidebarspacer;
 
    // Video
 
    QGridLayout *videolayout;
    QScrollArea *videoscrollarea;
   // Video *video;
 
    // void create video
 
    int videonumbercount;
    int rownumber;
    int collumnumber;
    int collumnumbertemp;
    int videonumberinput;
 
 
 
 
};
 
#endif // MAINWINDOW_H
Merci d'avance pour toute aide