Qtをメインに、プログラムやITに関する情報を発信

Qtの戯言

QEvent

QWidgetでマウスホイールイベントを受け取る

投稿日:

QWidget::wheelEvent()をオーバーライドする

QWidget::wheelEvent()をオーバーライドすることで、マウスホイールイベントを受け取ることができます。
QWheelEvent::angleDelta()関数で回転角を得ることが出来ますが、この値はマウスホイールが15度回転するごとに120ずつ前後するため、実際の回転角を求めるには8で割る必要があります。
結果が正であれば上方向の回転、負であれば下方向の回転となります。

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

void MainWindow::wheelEvent(QWheelEvent *event)
{
    // マウスホイールが15度回転するごとに120ずつ前後するため、実際の回転角を求めるには8で割る
    int degree = event->angleDelta().y() / 8;

    if (degree > 0) {
        qDebug(u8"上方向スクロール 角度:%d", degree);
    }
    else {
        qDebug(u8"下方向スクロール 角度:%d", degree);
    }
}

 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow() {}

protected:
    void wheelEvent(QWheelEvent *event) override;

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

-QEvent
-, ,

Copyright© Qtの戯言 , 2020 All Rights Reserved Powered by STINGER.