QtCore 5.0에서 선 애니메이션을 그리려면 다음과 같이 코드를 작성하여 펜에 의해 픽셀별로 그려지는 것처럼 보입니다.QGraphicsLineItem에 애니메이션을 적용 할 때의 문제
내 아이디어는 타이머를 사용하고 QGraphicsLineItem :: setLine()을 호출하는 슬롯에 timeout()을 연결하여 회선을 그리는 방법과 루프를 만들고 점차적으로 회선을 그릴 SLOT move()를 만드는 방법입니다. myLine.h
#ifndef MYLINE_H
#define MYLINE_H
#include <QGraphicsLineItem>
class myLine : public QObject, public QGraphicsLineItem
{
Q_OBJECT
public:
myLine();
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private slots:
void mySlot();
private:
QLineF thisline;
};
#endif // MYLINE_H
myLine.cpp
myLine::myLine()
{
thisline.setLine(0,0,50,50);
}
void myLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(QPen(Qt::red, 8, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin));
painter->setBrush(QBrush(Qt::blue, Qt::DiagCrossPattern));
painter->drawLine(thisline);
}
void myLine::mySlot()
{
for (int i = 1; i < 100; i++)
{
QLineF line = this->line();
line.setLine(0,0,50+i,50+i);
update();
}
}
그런 다음 GraphicsScene
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(0,0,700,700);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);
myLine *line = new myLine();
scene->addItem(line);
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), line, SLOT(mySlot()));
timer->start(100);
전화
그러나 컴파일 할 때 즉시 한 줄만 그립니다. 그게 문제가 루프에있는 것 같아요,하지만 난 정확히 알아낼 수 없습니다. 누군가가 내게 힌트를 줄 수 있다면 정말 고맙습니다.