Qt - 在 QDialog 中的 QScrollArea 内绘制
-
23-12-2019 - |
题
在 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
. 。我读到我需要覆盖 paintEvent
的 QScrollArea
. 。但我不知道该怎么做。
任何关于绘图的帮助 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 实例的大小调整为您想要绘制的圆圈的大小。
不隶属于 StackOverflow