Barre de défilement dans un QGraphicsView
Mourad2009B
Messages postés
145
Statut
Membre
-
Mourad2009B Messages postés 145 Statut Membre -
Mourad2009B Messages postés 145 Statut Membre -
Bonjour à tous,
voila comme indiquer dans le titre, j'ai défini un QGraphicsView avec QTDesigner, ensuite, j'ai défini une scene, avec les items suivants:
voici le constructeur de ma classe principale
ce code sert a dessiner des rectangles l'un au dessous de l'autre, et quand on arrive à la fin on recommence dès le début on ce décalant vers la droite, et ainsi de suite. mon problème est que si le nombre de rectangle est très important, la vue ne me permet pas de les visualiser tous en se servant bien sur de la barre de défilement, j'ai commencer a faire quelques modifications entre les setSceneRect, setGeometry, mais je n'ai pas réussi à le faire.
merci d'avance pour votre aide
voila comme indiquer dans le titre, j'ai défini un QGraphicsView avec QTDesigner, ensuite, j'ai défini une scene, avec les items suivants:
voici le constructeur de ma classe principale
MainWindow2D::MainWindow2D(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow2D)
{
ui->setupUi(this);
this->setGeometry(15,5,qApp->desktop()->screen()->width() - 20, qApp->desktop()->screen()->height() - 330);
this->setFixedSize(qApp->desktop()->screen()->width() - 20, qApp->desktop()->screen()->height() - 60);
ui->verticalLayoutWidget->setGeometry(0,20,this->width(),this->height());
sceneLegende = new QGraphicsScene(this);
ui->graphicsViewLegende->setGeometry(0,20,this->width()-20,250);
sceneLegende->setSceneRect(0, 0, ui->graphicsViewLegende->width(), ui->graphicsViewLegende->height());
//Les coordonnées
//On définit les polices de caractères
QFont fontTextLegende(QFont("Tahoma",8,12,false));
QFontMetrics fontMetricsTextLegende(fontTextLegende);
//On définit les positions et les dimensions
int intPosRectLegende_x = 10;
int intPosRectLegende_y = 10;
int intDimRectLegende_x = 20;
int intDimRectLegende_y = 10;
int intEcartRectTextLegende_x = 10;
int intEcartRectTextLegende_y = 10;
int intPosTextLegende_x = intPosRectLegende_x + intDimRectLegende_x +
intEcartRectTextLegende_x ;
int intPosTextLegende_y = intPosRectLegende_y + intDimRectLegende_y/2 -
fontMetricsTextLegende.width("zzzzzz")/2;
//Les PEN
QPen pen(Qt::blue, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
//Les rectangles de légende
QPen penRect(Qt::red, 1, Qt::SolidLine);
QBrush pinceau(Qt::blue);
//Les titres des légendes
QFont maFont(QFont("Tahoma",11,12,true));
QFontMetrics maFontMetrics(maFont);
QGraphicsItem *itemRectangleLegende, *itemTextLegende;
for(int i(0) ; i < 100 ; i++)
{
itemRectangleLegende = sceneLegende->addRect(intPosRectLegende_x, intPosRectLegende_y, intDimRectLegende_x, intDimRectLegende_y, pen, pinceau);
itemTextLegende = sceneLegende->addText(QString("Référence %1").arg(i+1),fontTextLegende);
intPosTextLegende_x = intPosRectLegende_x + intDimRectLegende_x +
intEcartRectTextLegende_x ;
intPosTextLegende_y = intPosRectLegende_y + intDimRectLegende_y/2 -
fontMetricsTextLegende.height() + 2 ;
itemTextLegende->setPos(intPosTextLegende_x, intPosTextLegende_y);
ui->graphicsViewLegende->setScene(sceneLegende);
ui->graphicsViewGraphe->setScene(sceneGraphe);
//QMessageBox::information(this, "Titre", QString("intPosRectLegende_y = %1").arg(intPosRectLegende_y));
intPosRectLegende_y += 15;
//Cette condition sert à recommencer de tracer les rectangles du début, on se décalant vers la droite, dès qu'on arrive à "sceneLegende->height() - 20"
if(intPosRectLegende_y >= sceneLegende->height() - 20 )//ui->graphicsView->height() - 15)
{
intPosRectLegende_y = 10;
intPosRectLegende_x += intDimRectLegende_x + intEcartRectTextLegende_x*2 + fontMetricsTextLegende.width(QString("Référence %1").arg(i+1));
}
}
ce code sert a dessiner des rectangles l'un au dessous de l'autre, et quand on arrive à la fin on recommence dès le début on ce décalant vers la droite, et ainsi de suite. mon problème est que si le nombre de rectangle est très important, la vue ne me permet pas de les visualiser tous en se servant bien sur de la barre de défilement, j'ai commencer a faire quelques modifications entre les setSceneRect, setGeometry, mais je n'ai pas réussi à le faire.
merci d'avance pour votre aide
A voir également:
- Barre de défilement dans un QGraphicsView
- Barre de défilement - Guide
- Windows 11 barre des taches a gauche - Guide
- S barré ✓ - Forum Word
- Barre des taches - Guide
- Barre verticale clavier ✓ - Forum Autres distributions Linux
2 réponses
C'est un peu plus compliqué qu'il n'y parait.
Il faut mettre ton 'QGraphicsView' dans un container de type 'QScrollArea' qui va gérer l'affichage avec des ascenseurs automatiques si nécessaire.
Tu devrais avoir un code du style (très simplifié):
Bonne continuation.
Il faut mettre ton 'QGraphicsView' dans un container de type 'QScrollArea' qui va gérer l'affichage avec des ascenseurs automatiques si nécessaire.
Tu devrais avoir un code du style (très simplifié):
QGraphicsScene scene; QGraphicsView view(&scene); QScrollArea scrollArea; scrollArea.setWidget(&view);Voir la doc de Qt pour plus d'informations.
Bonne continuation.