Pregunta

En Qt5, tengo un QDialog ventana en la que he dibujado un círculo de la siguiente manera:

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 dibujo un círculo más grande, por ejemplo usando QRect(0,0,500,500);, el círculo que es mayor que la ventana de diálogo se recorta.Así que arrastré un QScrollArea en la ventana de diálogo y decida dibujar en ella para que las barras de desplazamiento se agreguen automáticamente.El QScrollArea se puede acceder usando ui->scrollArea.

Cambié el código anterior configurando QPainter painter(ui->scrollArea);.Sin embargo, nada aparece en el QScrollArea.Leí que necesito anular el paintEvent de QScrollArea.Pero no sé cómo hacer esto.

Cualquier ayuda para dibujar en el QScrollArea?

¿Fue útil?

Solución

Dibujo en el QScrollarea no es lo que desea, ya sea porque el QScrollarea en realidad tiene un widget de viewPort.

Crear otra clase que hereda Qwidget.Anular el método de PaintEvent () y a la pintura que mencionas.Luego, agregue el widget al área de desplazamiento en su diálogo.

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

Para hacerlo realmente útil, deberá cambiar el tamaño de la instancia de MyWidget al tamaño del círculo que desea dibujar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top