QTimer не работает, не меняется угол наклона линии

хотел написать программу, которая будет работать, как простой радар, за основу взял видео, где делают аналоговые часы, но в моей программе совершенно не работает поворот линии по таймеру. Пробовал в SLOT менять методы, использовал currentTime, но ничего не помогло. И если можно, задам еще один вопрос, при ручном изменение угла поворота линии, почему-то смещаются ее начальные значения, есть ли способ это как-то исправить? В QT я совсем новичок.

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPainter>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

protected:
    void paintEvent(QPaintEvent*) override;


};


#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), SLOT(update()));
    timer->start(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter;
    painter.begin(this);

    painter.setRenderHint(QPainter::Antialiasing);

    painter.translate(QPoint(width()/2,height()/2));
    int R = 1.6*qMin(width()/2,height()/2);
    painter.drawEllipse(-235,-270,R,R); //рисование большого круга
    painter.drawEllipse(-180,-215,R/1.3,R/1.3); //рисование среднего круга
    painter.drawEllipse(-130,-160,R/1.8,R/1.8); //рисование маленького круга

    painter.drawLine(0,-290,0,230); //рисование вертикальной линии
    painter.drawLine(-250,-20,260,-20);//рисование горизонтальной линии
    painter.setPen(Qt::green);
    painter.rotate(6.0*60);
    painter.drawLine(0,-20,0,-270); //рисование линии, которая должна поворачиваться
    painter.end();
}

Ответы (1 шт):

Автор решения: e.n.shirokov

mainwindow.h

class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private slots:
        void onTimeout();
    
    private:
        int angle;
    
        void paintEvent(QPaintEvent*) override;
    };

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    angle = 0;
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &MainWindow::onTimeout);
    timer->start(1000);    
}


void MainWindow::paintEvent(QPaintEvent *)
{

    QPainter painter;
    painter.begin(this);

    painter.translate(QPoint(width()/2,height()/2));

    angle = (angle >= 0 && angle <= 350) ? angle+10 : 0;

    painter.drawLine(0,-290,0,230); //рисование вертикальной линии
    painter.drawLine(-250,0,260,0);//рисование горизонтальной линии
    painter.setPen(Qt::green);
    painter.rotate(angle);
    painter.drawLine(0,0,0,-270); //рисование линии, которая должна поворачиваться
    painter.end();

}

void MainWindow::onTimeout()
{
    this->update(this->rect());
}
→ Ссылка