2017-02-01 24 views
0

私はQt3DWindow()を含むQWidgetを持っています。私はマウスのスクロールホイールを使ってQt3DWindow内のQtEntityを「ズーム」することができるようにしたいと思います。Qt 3Dウィンドウのマウスコントロール

私は、Qt3DWindowフレームの外にマウスを置いたときのみ機能します。ここでは、ウィンドウを初期化し、マウスホイールイベントを処理するコードを示します。

ウィンドウの初期化:

mainView = new Qt3DExtras::Qt3DWindow(); 
mainView->defaultFramegraph()->setClearColor(QColor(QRgb(0x4d4d4f))); 

QWidget *container = QWidget::createWindowContainer(mainView); 

加工ホイールイベント:

void ModelView::wheelEvent(QWheelEvent *event){ 

    QVector3D vec; 

    vec = cameraEntity->position() - modifier->m_transform->translation(); 

    vec = vec.normalized(); 

    QPoint delta = event->angleDelta(); 

    int zoom_distance = delta.y()*0.01; 

    vec = cameraEntity->position() - zoom_distance*vec; 

    cameraEntity->setPosition(vec); 
} 

Qt3DWindowフレームの上にマウスを移動するとき、ウィンドウのマウスのグラブを上書きするためのトリックは何ですか?

ご協力いただきありがとうございます。

答えて

1

イベントフィルタを使用してQt3DWindowイベントを代行受信することをお勧めします。 ModelViewクラスは、Qt3DWindowにイベントフィルタとして自身をインストールし、ホイールイベントを検出し、それらを処理し、trueを返して処理されたことを示します。他のすべてのイベントについては、falseを返し、Qt3DWindowはそれらを正常に受信して処理します。

docsのQObject :: installEventfilterメソッドとQObject :: eventFilterメソッドを見てください。

+0

恐ろしい!これは完璧に機能しました。ありがとう! – dsell002

+0

歓迎します...それはあなたのための適切なソリューションだったことをうれしく思います。 – goug

関連する問題