因此,我需要重新创建雷达类型的效果。我的一条线的一点在屏幕中心,另一条线伸出到雷达屏幕的边缘。

我想使用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);
}

关于c++ - 在QT中将直线的一端放置在圆上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42559114/

10-11 14:35