mouse move event
qt creatorプロジェクトでmouseイベントを使ってみました
プロジェクトを作成し,生成されたwidgetを以下のように変更します.
mainwindow.cpp
# include "mainwindow.h"
# include "./ui_mainwindow.h"
# include <QMouseEvent> // add
# include <QtCore/QDebug> // add
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
// add
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
qDebug() << "test";
}
mainwindow.h
# ifndef MAINWINDOW_H
# define MAINWINDOW_H
# include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void mouseMoveEvent(QMouseEvent *event); // add
private:
Ui::MainWindow *ui;
};
# endif // MAINWINDOW_H
結果:表示されたwidgetでクリックボタンを押しながらマウスを移動すると"test"とコンソールに表示されました
mouse click event
1
以下のようにするとクリックボタンを押したタイミングで"press"とコンソールに表示されます
mainwindow.cpp
# include "mainwindow.h"
# include "./ui_mainwindow.h"
# include <QMouseEvent> // add
# include <QtCore/QDebug> // add
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
// add
void MainWindow::mousePressEvent(QMouseEvent *event)
{
qDebug() << "press";
}
mainwindow.h
# ifndef MAINWINDOW_H
# define MAINWINDOW_H
# include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void mousePressEvent(QMouseEvent *event); // add
private:
Ui::MainWindow *ui;
};
# endif // MAINWINDOW_H
2.clickした時のカーソル位置取得
mousePressEvent関数を以下の様に変更するとクリック時のカーソル位置を取得できます.
void MainWindow::mousePressEvent(QMouseEvent *event)
{
// get mouse pos:
// 参考: https://www.qtcentre.org/threads/3073-How-to-get-mouse-s-position
QPoint p = this->mapFromGlobal(QCursor::pos());
qDebug() << "press:" << p;
}
3.uiに配置したlabel座標系でのマウスポジション取得
ui上にlabelを配置し以下のようにマウスコールバック関数を変更するとui上配置したlabel座標系でのマウス位置を取得できます
void MainWindow::mousePressEvent(QMouseEvent *event)
{
// get mouse pos:
// 参考: https://www.qtcentre.org/threads/3073-How-to-get-mouse-s-position
QPoint p = ui->label->mapFromGlobal(QCursor::pos());
qDebug() << "press:" << p;
}