Qt - 在QDialog中绘制QScrollArea内部

时间:2014-02-27 17:39:01

标签: qt drawing qpainter qdialog qscrollarea

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,0,500,500);,则会剪切大于对话框窗口的圆圈。所以我将QScrollArea拖到对话框窗口并决定绘制它,以便自动添加滚动条。可以使用QScrollArea访问ui->scrollArea

我通过设置QPainter painter(ui->scrollArea);更改了上述代码。但是,QScrollArea中出现了nothings。我知道我需要覆盖paintEvent的{​​{1}}。但我不知道该怎么做。

有关绘制QScrollArea的任何帮助吗?

1 个答案:

答案 0 :(得分:1)

在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实例的大小调整为您想要绘制的圆的大小。