「Qtのコントロール - マウス」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(Wiki がページ「Qtの基礎 - マウスイベント」を「Qtのコントロール - マウス」に、リダイレクトを残さずに移動しました)
編集の要約なし
3行目: 3行目:
<br><br>
<br><br>


== サンプルコード ==
== マウスボタンの押下 ==
QWidgetまたはその派生クラスにおいて、マウスイベントが発生する時、シグナルが発行されるのではなく、コールバックが呼び出される。<br>
QWidgetまたはその派生クラスにおいて、マウスイベントが発生する時、シグナルが発行されるのではなく、コールバックが呼び出される。<br>
<br>
<br>
12行目: 12行目:
<br>
<br>
もし、マウスを移動させずに<code>mouseMoveEvent</code>イベントハンドラを発生させる場合は、<code>setMouseTracking(true)</code>を呼び出す。<br>
もし、マウスを移動させずに<code>mouseMoveEvent</code>イベントハンドラを発生させる場合は、<code>setMouseTracking(true)</code>を呼び出す。<br>
<br>
<u>※注意</u><br>
<u>その座標に存在するオブジェクトが使用したイベントは、<code>mousePressEvent</code>では受け取れない。</u><br>
<u>イベント一括処理で破棄されたイベントは受け取れない。</u><br>
<syntaxhighlight lang="c++">
// Mainwindow.h
// ...略
protected:
    void mousePressEvent(QMouseEvent *pEevent);
    void mosueReleaseEvent(QMouseEvent *pEevent);
    void mouseMoveEvent(QMouseEvent *pEevent);
    void wheelEvent(QMouseEvent *pEevent);
</syntaxhighlight>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
// MainWindow.cpp
  // ボタンを押下した時のコールバック
  // ボタンを押下した時のコールバック
  void MainWindow::mousePressEvent(QMouseEvent *pEvent)
  void MainWindow::mousePressEvent(QMouseEvent *pEvent)
52行目: 70行目:
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<center>
表. マウスボタン定義 [enum Qt::MouseButton]<br>
{| class="wikitable" style="background-color:#fefefe;"
|-
! style="background-color:#00ffff;" | 定義
! style="background-color:#00ffff;" | 説明
|-
| Qt::NoButton || なし
|-
| Qt::AllButtons || 全てのマウスボタン
|-
| Qt::LeftButton || 左ボタン
|-
| Qt::RightButton || 右ボタン
|-
| Qt::MiddleButton || 中央ボタン
|}
</center>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]

2021年3月29日 (月) 13:36時点における版

概要

Qtにおいて、マウスイベントを処理する手順を記載する。


マウスボタンの押下

QWidgetまたはその派生クラスにおいて、マウスイベントが発生する時、シグナルが発行されるのではなく、コールバックが呼び出される。

以下の例では、マウスイベントの各コールバックを示している。

mouseMoveEventイベントハンドラは、マウスのいずれかのボタンが押下した時に呼び出される。
このイベントは、mouseTrackingプロパティで制御されており、初期値はfalseである。

もし、マウスを移動させずにmouseMoveEventイベントハンドラを発生させる場合は、setMouseTracking(true)を呼び出す。

※注意
その座標に存在するオブジェクトが使用したイベントは、mousePressEventでは受け取れない。
イベント一括処理で破棄されたイベントは受け取れない。

 // Mainwindow.h
 
 // ...略
 
 protected:
    void mousePressEvent(QMouseEvent *pEevent);
    void mosueReleaseEvent(QMouseEvent *pEevent);
    void mouseMoveEvent(QMouseEvent *pEevent);
    void wheelEvent(QMouseEvent *pEevent);


 // MainWindow.cpp
 
 // ボタンを押下した時のコールバック
 void MainWindow::mousePressEvent(QMouseEvent *pEvent)
 {
    if( pEvent->button() == Qt::LeftButton)
    //if(pEvent->buttons() & Qt::LeftButton)  // 複数のボタンを押下する場合
    {  // マウスの左ボタンを押下した場合
 
    }
    else if(pEvent->button() == Qt::RightButton)
    {  // マウスの右ボタンを押下した場合
    }
    else if(pEvent->button() == Qt::MiddleButton)
    {  // マウスの中ボタンを押下した場合
    }
 
    // マウスのボタンが押下された位置を取得する
    QPoint pntLastPos = pEvent->pos();
 }
 
 // マウスのいずれかのボタンを離した場合のコールバック
 void MainWindow::mosueReleaseEvent(QMouseEvent *pEvent)
 {
 }
 
 // マウスが移動した場合のコールバック
 void MainWindow::mouseMoveEvent(QMouseEvent *pEvent)
 {
 }
 
 // マウスホイールを回した場合(引数の型がQWheelEvent)
 void MainWindow::wheelEvent(QWheelEvent *pEvent)
 {
    // マウスホイールの前方 : 正の値
    // マウスホイールの後方 : 負の値
    // QWheelEventクラスのdeltaメソッドの値 : マウスホイールを回した角度の8倍の値
    // 標準的なマウスでは1ステップ15度のため、8 * 15 = 120で除算する
    double dSteps = (double)pEvent->delta() / 120.0;
 }


表. マウスボタン定義 [enum Qt::MouseButton]

定義 説明
Qt::NoButton なし
Qt::AllButtons 全てのマウスボタン
Qt::LeftButton 左ボタン
Qt::RightButton 右ボタン
Qt::MiddleButton 中央ボタン