Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Начало .h файла
- class Spectrum : public QWidget
- {
- Q_OBJECT
- public:
- Spectrum(QWidget *parent = nullptr);
- ~Spectrum();
- float scaleX = 0.043; //Масштаб по оси X
- float scaleY = 1; //Масштаб по оси Y
- float offsetX = 0; //Отступ от начала координат по оси X
- float offsetY = -180; //Отступ от начала координат по оси Y
- float minOffsetY = -180;
- float maxOffsetY = 0;
- int countInPixel = 1; //Максимальное количество точек в столбце изображения по оси X
- float stepVectorUnitX = 1; //Шаг значений в vectorUnitY
- std::vector<float> vectorUnitX; //Вектор значений точек по оси X
- std::vector<float> vectorUnitY; //Вектор значений точек по оси Y
- std::vector<int> vectorPixelX; //Вектор координат точек в пиксельном пространстве по оси X
- std::vector<int> vectorPixelY; //Вектор координат точек в пиксельном пространстве по оси Y
- void makeVectorUnitX(); //Создать vectorUnitX
- void makeVectorUnitY(); //Создать vectorUnitY
- void makeVectorPixelX(); //Создать vectorUnitX
- void makeVectorPixelY(); //Создать vectorUnitY
- int sizeFFT = 2048; //Размер FFT
- QTimer drawTimer;
- QPoint m_lastPos; // Последняя позиция мыши
- protected:
- void paintEvent(QPaintEvent* event) override;
- void wheelEvent(QWheelEvent *event) override;
- void mousePressEvent(QMouseEvent* event) override;
- void mouseReleaseEvent(QMouseEvent* event) override;
- void mouseMoveEvent(QMouseEvent* event) override;
- public slots:
- void timeoutTimer();
- };
- //Начало .cpp файла
- Spectrum::Spectrum(QWidget *parent) : QWidget(parent)
- {
- stepVectorUnitX = 48000.0/sizeFFT;
- makeVectorUnitX();
- makeVectorUnitY();
- makeVectorPixelX();
- makeVectorPixelY();
- makeVectorAproximatedPoint();
- // makeVectorTransform();
- QObject::connect(&drawTimer, SIGNAL(timeout()), this, SLOT(timeoutTimer()));
- drawTimer.setInterval(33);
- drawTimer.setSingleShot(false);
- drawTimer.start();
- setFocusPolicy(Qt::StrongFocus);
- bresenhamLine1.resize(10000);
- bresenhamLine2.resize(10000);
- }
- Spectrum::~Spectrum()
- {
- }
- void Spectrum::makeVectorUnitX()
- {
- if(vectorUnitX.size() != sizeFFT)
- {
- vectorUnitX.resize(sizeFFT, 0);
- }
- for(int i = 0; i < sizeFFT; i++)
- {
- vectorUnitX[i] = stepVectorUnitX*i;
- }
- }
- void Spectrum::makeVectorUnitY()
- {
- if(vectorUnitY.size() != sizeFFT)
- {
- vectorUnitY.resize(sizeFFT, 0);
- }
- std::random_device rd;
- std::mt19937 rng(rd());
- std::uniform_int_distribution<int> rand(-180, 0);
- for(int i = 0; i < sizeFFT; i++)
- {
- vectorUnitY[i] = rand(rng);
- }
- vectorUnitY[0] = 10;
- }
- void Spectrum::makeVectorPixelX()
- {
- if(vectorPixelX.size() != vectorUnitX.size())
- {
- vectorPixelX.resize(vectorUnitX.size(), 0);
- }
- float pixelOffsetX = offsetX*scaleX;
- for(int i = 0; i < vectorPixelX.size(); i++)
- {
- vectorPixelX[i] = round(vectorUnitX[i]*scaleX - pixelOffsetX);
- }
- }
- void Spectrum::makeVectorPixelY()
- {
- if(vectorPixelY.size() != vectorUnitY.size())
- {
- vectorPixelY.resize(vectorUnitY.size(), 0);
- }
- float pixelOffsetY = offsetY*scaleY;
- for(int i = 0; i < vectorPixelY.size(); i++)
- {
- vectorPixelY[i] = round(vectorUnitY[i]*scaleY - pixelOffsetY);
- }
- }
- void Spectrum::mousePressEvent(QMouseEvent* event)
- {
- m_lastPos = event->pos();
- }
- void Spectrum::mouseReleaseEvent(QMouseEvent* event)
- {
- }
- void Spectrum::mouseMoveEvent(QMouseEvent* event)
- {
- QPointF delta = event->pos() - m_lastPos;
- offsetX += -delta.x()/scaleX;
- offsetY += delta.y()/scaleY;
- makeVectorPixelX();
- m_lastPos = event->pos();
- }
- void Spectrum::timeoutTimer()
- {
- makeVectorUnitY();
- makeVectorPixelY();
- update();
- }
Add Comment
Please, Sign In to add comment