2014-02-27 74 views
0

绘制内部QScrollArea在Qt 5,我对我所画出的圆如下一个QDialog窗口:Qt的 - 在一个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到对话框窗口并决定画出来,以便自动添加滚动条。可以使用ui->scrollArea访问QScrollArea

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

QScrollArea上绘图的任何帮助?

回答

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

+0

谢谢!完美的作品! – Ketan