Qt的 - 画里面QScrollArea在了QDialog(Qt - draw inside QSc

2019-10-29 17:43发布

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 。 我读,我需要覆盖paintEventQScrollArea 。 但我不知道如何做到这一点。

在图纸上的任何帮助QScrollArea

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



文章来源: Qt - draw inside QScrollArea in a QDialog