使用createWindowContainer多个问题将UE4窗口嵌入Qt

时间:2019-03-20 02:49:06

标签: qt embed unreal-engine4

我尝试使用createWindowContainer()将UE4窗口嵌入Qt。它成功了,但仍然存在多个问题:

  1. 如果Qt主窗口停留在屏幕的左上角(坐标x == 0和y == 0),则UE4窗口内的鼠标光标位置正确,但是如果将Qt主窗口拖动到另一个位置,则UE4窗口中的鼠标光标位置错误并且具有相同的偏移量。

鼠标光标在错误的位置 mouse cursor at wrong position

如图所示,主Qt窗口与屏幕左上角的距离为(30,30),而UE4窗口与Qt主窗口的偏移为(100,50)。在UE4窗口内的鼠标光标也应从其应有的位置偏移(30,30)。

我打印出UE4代码SWindow :: GetPositionInScreen()。独立运行UE4窗口时,它返回屏幕左上角的偏移量。 但是从Qt主窗口运行UE4时,它仅返回距Qt主窗口左上角的偏移量(100,50),并且应该返回(100,50)+(30,30)=(130,80)。 我该怎么做才能使其正确?

  1. 我尝试通过qt端控制鼠标事件,但失败了。 我没有使用本机QWidget和QWindow,而是实现了自己的CanvasWidget(继承自QWidget)和CanvasWindow(继承自QWindow),并重新实现了它们的mouseMoveEvent(),mousePressEvent(),event(),eventFilter(),enterEvent() ,leaveEvent()函数,但没有一个函数被成功调用。 如何获得这些事件的调用?

我的代码如下:

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);

0 个答案:

没有答案