在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中没有出现任何东西。我读到我需要覆盖paintEvent of QScrollArea。但我不知道该怎么做。
使用QScrollArea绘图的任何帮助
发布于 2014-02-27 18:49:02
在QScrollArea上绘图也不是您想要的,因为QScrollArea实际上有一个viewport小部件。
创建继承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实例的大小调整为要绘制的圆圈的大小。
https://stackoverflow.com/questions/22076136
复制相似问题