所以我根据QDial的位置绘制QLine,我需要在场景中绘制后定期调整线上点的位置。
以下是我获得积分的方式
void addNewPoint( int qdialAngle ){
double oldX = m_sceneCenter;
double oldY = m_sceneCenter;
double newX = oldX + qCos(qDegreesToRadians(range)) * m_sceneRadius;
double newY = oldY + qCos(qDegreesToRadians(range)) * m_sceneRadius;
QPointF pt(newX, newY);
m_historyPoint_list.append(pt);
m_historyPoint_count++;
switch(m_historyPoint_count){
case 1:
m_historyPoint_A = pt;
break;
case 2:
m_historyPoint_B = pt;
m_historyPoint_count = 0;
break;
}
}
以下是我从这些方面划线的方法。
void drawPathLine(){
m_HistoryLine = QLineF(m_historyPoint_A, m_historyPoint_B);
QPen linePen(Qt::green, Qt::SolidLine);
linePen.setWidth(2);
m_currentLineItem = m_GraphicsScene->addLine(m_HisoryLine, linePen);
m_line_list.append(m_currentLineItem);
}
一切正常,我只是不知道如何调整线上的点数。
基本上,我需要画出的线条随着时间的推移慢慢地被吸入场景的中心。
如果我将QGraphicsScene慢慢地向上扩展,那么效果大部分起作用,它至少适用于原型,但问题是随着时间的推移,线越来越小。 QLine似乎没有设置为忽略转换的标志,这种转换在这种情况下会起作用。无论哪种方式,缩放场景还有其他问题,这使我相信它可能无论如何都不是。
我试图指出Points,但QLineF并没有接受指针。
如何在绘制此线后调整此线?
这是我尝试的内容:
void offsetPoints(){ //called from a timer
foreach(QGraphicsLineItem* line, m_line_list){
QLineF adjLine = line->line();
int adjLine_pt1_x = adjLine.p1.x();
int adjLine_pt1_y = adjLine.p1.y();
int adjLine_pt2_x = adjLine.p2.x();
int adjLine_pt2_y = adjLine.p2.y();
QPointF newOffsetP1 = QPointF(getNewPoint( getBearing(adjLine_pt1_x, adjLine_pt1_y),
getRange(adjLine_pt1_x, adjLine_pt1_y));
QPointF newOffsetP2 = QPointF(getNewPoint( getBearing(adjLine_pt2_x, adjLine_pt2_y),
getRange(adjLine_pt2_x, adjLine_pt2_y));
adjLine.setP1(newOffsetP1);
adjLine.setP2(newOffsetP2);
line->setline(adjLine);
}
}
QPointF getNewPoint(double bearing, double range){
double oldX = 400;
double oldY = 400;
double m_offsetSpeed -= 0.1;
double newX = oldX + qCos(qDegreesToRadians(bearing)) * (range - m_offsetSpeed);
double newY = oldY + qSin(qDegreesToRadians(bearing)) * (range - m_offsetSpeed);
QPointF newPoint = QPointF(newX, newY);
return newPoint;
}
double getBearing(int Xpos, int Ypos){
double lat1 = m_center.x();
double lon1 = m_center.y();
double lat2 = Xpos;
double lon2 = Ypos;
double X = qSin(lon2 - lon1) * qCos(lat2);
double Y = qCos(lat1) * qSin(lat2) - qSin(lat1) * qCos(lat2) * qCos(lon2 - lon1);
double bearing = (qAtan2(Y,X) * (180 / 3.14159265), 360);
if(bearing < 0)
bearing += 360;
return bearing;
}
double getRange(int Xpos, int Ypos){
double centerX = m_center.x();
double centerY = m_center.y();
double newX = centerX - Xpos;
double newY = centerY - Ypos;
double distance = qPow(newX, 2) - qPow(newY,2);
double range = qSqrt( distance);
return range;
}
这些线条在绘制后肯定会有所作为,但它们的行为非常不稳定。我觉得我很近,也许我的数学已经关闭了?
我在我的&#34; m_historyPoint_list&#34;中存储用于创建行的点。我的想法是我应该能够在这些点上进行这些计算,然后这条线就会简单地#34;更新,但它们没有工作,因为一旦点在列表中,它们就变成了const点。
同样,如果有人知道我可以将ItemIgnoresTransformations应用到我的线上的方式,那么当我缩放我的场景时,这些线条不会畏缩,大部分头痛都会消失。