Qt-在QDialog中绘制QScrollara内部

Qt-在QDialog中绘制QScrollara内部,qt,drawing,qpainter,qdialog,qscrollarea,Qt,Drawing,Qpainter,Qdialog,Qscrollarea,在Qt5中,我有一个QDialog窗口,我在该窗口上画了一个圆,如下所示: void MyDialog::paintEvent(QPaintEvent *pe) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing,true); QPen pen(Qt::blue,2); painter.setPen(pen); QRect r=QRect

Qt
5中,我有一个
QDialog
窗口,我在该窗口上画了一个圆,如下所示:

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);
}
如果我画一个更大的圆,例如使用
QRect(0,0500500),将剪裁大于对话框窗口的圆。因此,我将一个
QScrollArea
拖到对话框窗口上,并决定在该窗口上绘制,以便自动添加滚动条。可以使用
ui->scrollArea
访问
QScrollArea

我通过设置
QPainter painter(ui->scrollArea)更改了上述代码。但是,
qscrollara
中没有显示任何内容。我读到我需要覆盖
qscrollara
paintEvent
。但我不知道怎么做


QScrollArea

上绘图的任何帮助都不是您想要的,因为QScrollArea实际上有一个视口小部件

创建另一个继承QWidget的类。重写paintEvent()方法并将其应用于您提到的绘画。然后,将小部件添加到对话框中的滚动区域

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

要使它真正有用,您需要将MyWidget实例的大小调整为要绘制的圆的大小。

谢谢!很好用!