Qt - Disegna all'interno di qscrollarea in un qdialog
-
23-12-2019 - |
Domanda
In Qt
5, 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
?
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.