,因此我需要重新创建雷达型效果。我在屏幕中央有一点点,另一个可以伸向雷达屏幕的边缘。
我想使用qdial来控制我的线的第二点的位置。
我只是不确定我需要使用的数学来将第二点锁定在屏幕边缘,因为QDial将其移动。
预先感谢。
[添加信息]
所以这是我将线路添加到场景中的方式。将线的角度与我的QDial绑定在一起,可以完美地处理所有数学,但是它在表盘的每个转弯时都会透支另一线,而不仅仅是调整一条线的角度。
void Radar::drawMainLine(){
QPainter linePainter;
linePainter.begin(this);
linePainter.setRenderHint(QPainter::Antialiasing);
QPen mainline(Qt::yellow);
mainline.setWidth(3);
QLineF line (QPointF(400,400), QPointF(0,0) );
line.setAngle(m_QDial_rotation);
m_RadarScene->addLine(line, mainline);
}
如何调整一线角度?
我看到我应该能够仅影响线路终点之一的位置,但我认为这将使我回到需要算法以处理其位置的道路上。
在行开始时使用valueChanged
信号,setmaximun值为359和setTransformoriginpoint。在标题中:
private:
...
QGraphicsScene *m_RadarScene;
QLineF line;
QGraphicsLineItem *item;
public slots:
void drawMainLine(int angle);
在构造函数中:
connect(ui->m_QDial_rotation, &QDial::valueChanged, this, &Radar::drawMainLine);
ui->m_QDial_rotation->setMaximum(359);
QPointF mCenter = QPointF(ui->graphicsView->size().width()/2, ui->graphicsView->size().height()/2);
int radius = 50;
ui->graphicsView->centerOn(mCenter);
line = QLineF(mCenter, mCenter + QPointF(0, radius) );
item = m_RadarScene->addLine(line, mainline);
item->setTransformOriginPoint(mCenter);
onslot:
void Radar::drawMainLine(int angle)
{
qDebug()<<angle;
item->setRotation(angle);
}
您可以在qline上创建一个名为m_line的指针。该指针将包含当前行,一旦OU想要移动行,您就可以进行removeItem(我想您的雷达是QGraphicsScene),然后添加新行。这样:
void Radar::drawMainLine(){
QPainter linePainter;
linePainter.begin(this);
linePainter.setRenderHint(QPainter::Antialiasing);
QPen mainline(Qt::yellow);
mainline.setWidth(3);
QLineF *line = new QLine(QPointF(400,400), QPointF(0,0) );
line->setAngle(m_QDial_rotation);
if (m_line != nullptr)
m_RadarScene->removeItem(*m_line);
m_line = line; // add QLine* m_line = nullptr; in your class
m_RadarScene->addLine(*line, mainline);
}