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);, ,大于对话框窗口的圆被剪掉。于是我拖了一个 QScrollArea 到对话框窗口并决定在其上绘制,以便自动添加滚动条。这 QScrollArea 可以使用访问 ui->scrollArea.

我通过设置更改了上面的代码 QPainter painter(ui->scrollArea);. 。然而,什么也没有出现 QScrollArea. 。我读到我需要覆盖 paintEventQScrollArea. 。但我不知道该怎么做。

任何关于绘图的帮助 QScrollArea?

有帮助吗?

解决方案

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top