イベント機能でどのマウスボタンが押されているかを判断しようとすると、PySideに問題が発生します。特に、マウスの移動イベントを無視する場合に必要です。これは、マウスの左右両方のボタンで機能するためです。
シーンの右ボタンが押された場合のマウス移動イベントを無視したい。何か助けはありますか?
すべてのマウスイベントには、どちらのボタンが押されたかを判別するための2つのメソッド(button
とbuttons
)があります。ただし、move
イベントの場合のみ、ドキュメントには次のように記載されています。
マウス移動イベントの場合、戻り値は常にQt :: NoButtonであることに注意してください。
mouseMoveEvent
の場合は、buttons
メソッドを使用する必要があります。
void mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() == Qt::RightButton)
qDebug() << "Only right button";
}
移動イベントを無視するには、もちろんeventFilter
でこの作業を行う必要があります。
QApplication::mouseButtons()
はmouseButton
のステータスを返すため、KeyPressEvent
でマウスのステータスを取得できます。
ブール値を使用できます:
void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
pressed=true; //<-----
}
}
およびmouseMoveEvent
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
float dx = event->x() - lastPos.x(); // where lastpos is a QPoint member
float dy = event->y() - lastPos.y();
if (dx<0) dx=-dx;
if (dy<0) dy=-dy;
if (event->buttons() & Qt::LeftButton) { //if you have MOVEd
...do something
}
if (event->buttons() & Qt::RightButton) {
if (pressed==true) return;
else{
...do
}
}
}
マウスリリースでは、pressed = falseを設定する必要があります。 (「押された」はクラスのメンバーである必要があります)
お役に立てば幸いです。お知らせください
Qt::RightButton
でどのマウスボタンが押されているかを確認できます。 c ++コードで申し訳ありませんが、とにかくアイデアを理解していただければ幸いです。
void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
}
}