1

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(0,0,100,100);
       painter.drawEllipse(r);
}

如果我画了一个更大的圆圈,例如使用QRect(0,0,500,500);,则大于对话框窗口的圆圈将被剪裁。因此,我将 aQScrollArea拖到对话框窗口上并决定在其上绘制,以便自动添加滚动条。QScrollArea可以使用ui->scrollArea.

我通过设置更改了上面的代码QPainter painter(ui->scrollArea);。但是,nothings 出现在QScrollArea. 我读到我需要覆盖paintEventof QScrollArea。但我不知道该怎么做。

画图有什么帮助QScrollArea吗?

4

1 回答 1

2

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

于 2014-02-27T18:49:02.277 回答