Qt - dessinez à l'intérieur de QScrollArea dans un QDialog
-
23-12-2019 - |
Question
Dans Qt
5, j'ai un QDialog
fenêtre sur laquelle j'ai dessiné un cercle comme suit :
void MyDialog::paintEvent(QPaintEvent *pe)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
QPen pen(Qt::blue,2);
painter.setPen(pen);
QRect r=QRect(0,0,100,100);
painter.drawEllipse(r);
}
Si je dessine un cercle plus grand, par exemple en utilisant QRect(0,0,500,500);
, le cercle étant plus grand que la fenêtre de dialogue est tronquée.Alors j'ai traîné un QScrollArea
sur la fenêtre de dialogue et décidez de dessiner dessus pour que les barres de défilement soient automatiquement ajoutées.Le QScrollArea
accessible en utilisant ui->scrollArea
.
J'ai changé le code ci-dessus en définissant QPainter painter(ui->scrollArea);
.Cependant, rien n'apparaît dans le QScrollArea
.J'ai lu que je devais remplacer le paintEvent
de QScrollArea
.Mais je ne sais pas comment faire ça.
Toute aide pour dessiner sur le QScrollArea
?
La solution
Dessiner sur QScrollArea n'est pas non plus ce que vous voulez car QScrollArea possède en fait un widget de fenêtre d'affichage.
Créez une autre classe qui hérite de QWidget.Remplacez la méthode paintEvent() et la peinture que vous mentionnez.Ensuite, ajoutez le widget à la zone de défilement de votre boîte de dialogue.
MyDialog::MyDialog()
{
QScrollArea *pScrl = new QScrollArea(this);
pScrl->setWidget(new MyWidget(pScrl));
... // use a layout to put the scroll area in the dialog
}
Pour le rendre vraiment utile, vous devrez redimensionner l'instance MyWidget à la taille du cercle que vous souhaitez dessiner.