Question

Dans Qt5, 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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top