Domanda

In Qt5, ho una finestra QDialog su cui ho disegnato un cerchio come segue:

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);
}
.

Se disegna un cerchio più grande, ad esempio utilizzando QRect(0,0,500,500);, il cerchio che è maggiore della finestra di dialogo è ritagliato.Quindi ho trascinato un QScrollArea sulla finestra della finestra di dialogo e decidono di disegnarsi su questo in modo che le barre di scorrimento vengano aggiunte automaticamente.È possibile accedere al QScrollArea utilizzando ui->scrollArea.

Ho cambiato il codice sopra impostando QPainter painter(ui->scrollArea);.Tuttavia, le notturne appaiono nel QScrollArea.Ho letto di aver bisogno di sovrascrivere il paintEvent del QScrollArea.Ma non so come farlo.

Qualsiasi aiuto di disegno sul QScrollArea?

È stato utile?

Soluzione

Disegno sul qscrollarea non è quello che vuoi o perché il qscrollerea effettivamente ha un widget di vista.

Crea un'altra classe che eredita QWidget.Sostituisci il metodo PaintEvent () e al dipinto che menzione.Quindi, aggiungi il widget all'area di scorrimento nella finestra di dialogo.

MyDialog::MyDialog()
{
  QScrollArea *pScrl = new QScrollArea(this);
  pScrl->setWidget(new MyWidget(pScrl));
  ... // use a layout to put the scroll area in the dialog
}
.

Per renderlo davvero utile, dovrai ridimensionare l'istanza MyWidget alla dimensione del cerchio che vuoi disegnare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top