我正在处理一个项目,我需要从设备获取一些数据(点)并在小部件上显示它们。我使用的是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();
}
答案 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);
...
}