Q油漆工正在更新数据

QPainter updating data

本文关键字:更新 数据 油漆工      更新时间:2023-10-16

我在更新绘图时遇到问题。我有两个文件:mainwindow.cpp和drawwidget.cpp。在mainwindow中,我加载了一个带有x,y点参数的文件。当我点击一个按钮时,我会选择其中的几个,并将其传递给drawwidget来绘制这些点。

为了了解它的工作原理,我暂时画了一个椭圆,并将"p"乘以大小。当我点击一个按钮时,"p"会改变值(我在QMessageBox中打印了它,以及它的不同值),但椭圆的大小仍然相同。我做错了什么?

DrawWidget::DrawWidget(QWidget *parent) :
    QWidget(parent)
{
    p=30;
}
void DrawWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter painter(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
    painter.setRenderHint(QPainter::Antialiasing);
    paint(painter);
}
void DrawWidget::paint(QPainter &painter)
{
    painter.drawEllipse( QRect( 1*p-5, 5*p-5, 10, 10 ) );
}
void DrawWidget::handleData(sPunkt *&Tab_pkt)
{
    p=Array[0].x;
    update();
}

您需要update()您的小部件,以便触发QPaintEvent和对paintEvent()的后续调用。

绘制事件是重新绘制小部件的全部或部分的请求。它可以由于以下原因之一:

  • 重新绘制()或更新()被调用
  • 该小部件被遮挡,现在已被打开,或者
  • 许多其他原因

参见文档:QWidget::paintEvent()