Qt中的GUI更新

时间:2014-07-28 12:13:19

标签: qt user-interface

enter image description here我正在处理一个项目,我需要从设备获取一些数据(点)并在小部件上显示它们。我使用的是Qt 5和C ++语言。数据每秒12次,每次有895点。实际上它是雷达PPI显示的模拟。我有一个列表,我把重点放在那个,然后我尝试在小部件上绘制它们。问题是当我在小部件上绘制点时,它将连接点并绘制明显不需要的线。

void FormPPI::PPIUpdate()
{
QPainter* pdc = new QPainter();
ObservationList* list = monitoring->getObservationList();
ObservationList::iterator it = list->begin();

// qDebug() << list->size();
while (it != list->end())
{
    Observation *o = &(*it);

    int xp, yp;
    float angle = calcPhi(o->pos().bearing());
    //Find the pixel position on the screen
    getPixelPos(o->pos().range() * cos(angle * DEG2RAD),
                o->pos().range() * sin(angle * DEG2RAD),    xp, yp);

    //Draw observations here
    //o->lifeTime() gets object lifetime which is initialized by 12 
    //used to reduce the intensity of color like antique radar system displays
    pdc->fillRect(xp - 1, yp - 1, 2, 2, QColor(255, 255, 0, o->lifeTime() * 21));

    //Decrease the observation life time by 1
    o->decLifeTime();

    if(o->lifeTime() <= 1)
        list->erase(it);

    it++;
}
qDebug() << list->size();
update();
list->release();

}

1 个答案:

答案 0 :(得分:0)

我无法解释原因

pdc->fillRect(xp - 1, yp - 1, 2, 2, QColor(255, 255, 0, o->lifeTime() * 21));

在两个连续点(xp1,yp1)(xp2,yp2)之间填充矩形。

但你有另一种选择。您可以使用特定直径d直接绘制点(似乎您希望直径大约为2 pixels)。

int diameter = 2;
QPen pen = pdc->pen();
pen.setWidth(2);
pdc.setPen(pen);

while()
{
   ... 
   pen.setColor(QColor(255, 255, 0, o->lifeTime() * 21));
   pdc->setPen(pen);
   pdc->drawPoint(xp, yp);
   ...
}