根据滑条值改变指针角度

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QGraphicsScene *scene;
    QGraphicsPixmapItem *pointer;
    QPixmap pix1;
    QPixmap pix2;
    int m_angle;
    float w[2];
    float h[2];
private slots:
    void valueChange(int value);
    void repaint();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setText(QString("0")+QString("°   "));
    ui->lineEdit->setReadOnly(true);
    m_angle =0; //初始度
    QTimer *timer  = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(repaint()));
    timer->start(1000);
    w[0] =300;  //初始宽度
    w[1] = w[0]; // w[1]和h[1]用于保存图片缩放前的宽和高
    h[0]= 300;
    h[1] =h[0];
    ui->horizontalSlider->setMaximum(360);
    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(valueChange(int)));

}

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

void MainWindow::valueChange(int value)
{
    ui->lineEdit->setText(QString::number(value)+ "° ");
    m_angle=value;
}

void MainWindow::repaint()
{
    w[0] =ui->graphicsView->width();
    pix1.load(":./11.jpg");
    pix2.load("");
    scene = new QGraphicsScene(this);
    scene->setSceneRect(0,0,300,300);
    ui->graphicsView->setScene(scene);
    ui->graphicsView->scale(w[0]/w[1],w[0]/w[1]);
    w[1]=w[0];
    h[1]=h[0];
    scene->setBackgroundBrush(pix1);
    pointer = new QGraphicsPixmapItem();
    pointer->setPixmap(pix2);
    pointer->setPos(150,150);
    scene->addItem(pointer);
    pointer->setRotation(360 -m_angle);

    QGraphicsTextItem *degree = new QGraphicsTextItem();
    degree->setPos(111,118);
    degree->setHtml(QString("<h2><font color  = red size =5>%1° </font></h2>").arg(m_angle));
    scene->addItem(degree);

}

posted @ 2021-07-26 22:45  Azuki_op  阅读(48)  评论(0)    收藏  举报