Я попытался встроить окно UE4 в Qt, используя createWindowContainer (). Это успешно, но все еще имеет много проблем:
- Положение курсора мыши внутри окна UE4 является правильным, если главное окно Qt остается в верхнем углу экрана (с координатами x == 0 и y == 0), но если перетащить главное окно Qt в другую позицию, Положение курсора мыши внутри окна UE4 неверно и имеет одинаковое смещение.
курсор мыши в неправильном положении

См. Рисунок, главное окно Qt имеет смещение (30, 30) от верхнего угла экрана, а окно UE4 имеет смещение (100, 50) от основного окна Qt. Курсор мыши внутри окна UE4 также имеет смещение (30, 30) от того места, где оно должно быть.
Я печатаю код UE4 SWindow :: GetPositionInScreen (). При запуске автономного окна UE4, оно возвращает смещение от верхнего угла экрана.
Но когда запускается UE4 из главного окна Qt, он возвращает только смещение от угла полного окна главного окна Qt (100, 50) и ДОЛЖЕН возвращать (100, 50) + (30, 30) = (130, 80).
Что мне делать, чтобы это было правильно?
- Я пытался управлять событиями мыши на стороне qt, но не смог
Вместо использования собственных QWidget и QWindow, я реализовал свои собственные CanvasWidget (унаследованные от QWidget) и CanvasWindow (унаследованные от QWindow), и повторно реализовал их mouseMoveEvent (), mousePressEvent (), event (), eventFilter (), enterEvent () , оставитьEvent () функции, но ни одна из них не вызывается успешно.
Как я могу получить эти события, вызываемые?
Мои коды указаны ниже:
class CanvasWidget : public QWidget
{
Q_OBJECT
public:
CanvasWidget(QWidget *parent = nullptr);
virtual ~CanvasWidget();
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
bool event(QEvent *event) override;
bool eventFilter(QObject *obj, QEvent *event);
void enterEvent(QEvent *event) override;
void leaveEvent(QEvent *event) override;
};
class canvasWindow : public QWindow
{
Q_OBJECT
public:
canvasWindow(QWidget *parent = nullptr);
~canvasWindow();
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
bool event(QEvent *event) override;
bool eventFilter(QObject *obj, QEvent *event);
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
};
main.cpp
QWindow* ueQWindow = QWindow::fromWinId((WId)m_hwnUE4Window);
CanvasWindow* ue4Window = (CanvasWindow*)ueQWindow;
QWidget* nestedUEQWidget = QWidget::createWindowContainer(ue4Window , ptr2QtMainWindow);
CanvasWidget* nestedUEWidget = (CanvasWidget*)nestedUEQWidget;
nestedUEWidget->setMouseTracking(true);