Потому что каждый виджет имеет свой собственный mouseMoveEvent (). Поэтому вы не должны писать это вне класса виджетов. Вы должны переопределить mouseMoveEvent внутри виджета. Попробуйте создать класс, чьим родителем является Qt3DWindow. И реализовать mouseMoveEvent () внутри него.

у получать события мыши (например, положение мыши) в окне Qt3D, каждый раз, когда я щелкаю внутри окна.

я виделэтот вопрос (также тот же вопрос на этом форуме) но мой Qt3DWindow не находится внутри какого-либо виджета, поэтому я не думаю, что мне нужен EventFilter.

Я только начинаю изучать C ++ и Qt, поэтому я пытаюсь сделать простейшую возможную программу. В приведенном ниже коде (все мои программы в этом коде), я хотел бы получить положение мыши каждый раз, когда я щелкаю в окне Qt3D, но я не могу даже получить сообщение отладки каждый раз, когда я щелкаю.

Насколько я понимаю,mouseMoveEvent Функция вызывается только один раз, когда программа выполняется. Как бы я вызвал эту функцию в главном цикле, если в Qt есть такая вещь?

Мне нужно сделать что-то подобное?

Qt3DInput::QMouseDevice *mouse = new Qt3DInput::QMouseDevice(scene);

Но как бы я использовал это?

#include <QGuiApplication>

#include <Qt3DCore/QEntity>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QCameraLens>
#include <Qt3DCore/QTransform>
#include <Qt3DCore/QAspectEngine>

#include <Qt3DInput/QInputAspect>

#include <Qt3DRender/QRenderAspect>
#include <Qt3DExtras/QForwardRenderer>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DExtras/QGoochMaterial>
#include <Qt3DExtras/QSphereMesh>
#include <Qt3DExtras/QCuboidMesh>

#include <QMouseEvent>
#include <Qt3DInput/QMouseDevice>
#include <Qt3DInput/QMouseHandler>
#include <Qt3DInput/QMouseEvent>

#include <QDebug>

#include "qt3dwindow.h"

void mouseMoveEvent(Qt3DInput::QMouseEvent *event);

Qt3DCore::QEntity *createScene()
{
    // Root entity
    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;

    // Material
    //Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial(rootEntity);
    Qt3DRender::QMaterial *material = new Qt3DExtras::QGoochMaterial(rootEntity);

    //Cube
    Qt3DCore::QEntity *cubeEntity = new Qt3DCore::QEntity(rootEntity);
    Qt3DExtras::QCuboidMesh *cubeMesh = new Qt3DExtras::QCuboidMesh;

    cubeEntity->addComponent(cubeMesh);
    cubeEntity->addComponent(material);

    return rootEntity;
}

int main(int argc, char* argv[])
{
    QGuiApplication app(argc, argv);
    Qt3DExtras::Qt3DWindow view;

    Qt3DCore::QEntity *scene = createScene();

    // Camera
    Qt3DRender::QCamera *camera = view.camera();
    camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
    camera->setPosition(QVector3D(5.0, 5.0, 5.0f));
    camera->setViewCenter(QVector3D(0, 0, 0));

    Qt3DInput::QMouseEvent *e;

    mouseMoveEvent(e);

    view.setRootEntity(scene);
    view.show();

    return app.exec();
}

void mouseMoveEvent(Qt3DInput::QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        qDebug() << "ok";
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос