一、前言
在一次项目中,需要将Unity程序嵌入qt中,并在主界面显示,根据网络资料与相关代码,成功将unity程序嵌入,但是在点击Unity的Button按钮时却没有响应,在查找相关资料后,解决问题,在此记录。
二、问题原因
在单独运行unity的exe程序,button按钮能够正常触发,根据相关资料,发现问题可能是出现在unity程序嵌入qt窗口时,鼠标事件传递关系出现问题,猜测可能是嵌入时需要进行某些设置,之后尝试其他嵌入方式后,成功解决问题。
三、相关代码
void ShowUnityWindowsInQt::setWindowParent(HWND parentWidgetHandle, const QString& sonWindowTitleName,QWidget* parent)
{HWND hfigure;while (true){hfigure = FindWindow(NULL ,(LPCWSTR)(sonWindowTitleName.unicode()));if (hfigure != NULL){break;}}::SetParent(hfigure, parentWidgetHandle);LONG_PTR style = GetWindowLongPtr(hfigure, GWL_STYLE);style = style & ~(WS_THICKFRAME | WS_CAPTION | WS_SIZEBOX | WS_MAXIMIZEBOX | WS_MINIMIZEBOX);//移除子窗口的移动和调整大小的样式SetWindowLongPtr(hfigure, GWL_STYLE, style);m_window = QWindow::fromWinId((WId)hfigure);m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //这边可以设置一下属性m_widget = QWidget::createWindowContainer(m_window,this);m_widget->setFocusPolicy(Qt::StrongFocus);m_widget->setParent(parent);m_widget->show();}
四、参考文章
QT+Unity3D 超详细(将unity3D与QT进行连接,并实现信息传递)
五、最后
在参考文章的内容是,该文章作者说有边框能缩放,没有边框就无法缩放,但是本人在使用以上代码嵌入unity窗口后,暂时没有遇到该问题,即没有边框,且能够正常缩放,同时ui按钮能够正常触发,此为本人项目中实现代码,仅供参考,如有问题,欢迎指正。