在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
的任何帮助吗?
答案 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实例的大小调整为您想要绘制的圆的大小。