osgQOpenGLWidget嵌入Qt不响应鼠标移动事件和键盘事件

问题1:

        osgQOpenGLWidget嵌入Qt后,osgWidget控件的mouseEnter和mouseLeave事件未触发。

                解决方案            

                窗体控件设置:setMouseTracking(true),示例如下:

        ui->osgGLWidget->setMouseTracking(true);

问题2:

        osgQOpenGLWidget嵌入Qt窗体后,不响应键盘事件。

                解决方案

                窗体控件设置:setFocus(),示例如下

                ui->osgGLWidget->setFocus();

                备注:有楼主提出设置setFocus后,退出程序时会崩溃。暂未验证。

参考:osg嵌入osgQOpenGLWidget 无法接收键盘事件_VectorM4a1的博客-CSDN博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将osgQOpenGLWidget嵌入Qt中,您需要执行以下步骤: 1. 首先,确保您已经安装了Qt和OpenSceneGraph。 2. 在Qt Creator中创建一个新的Qt Widgets应用程序项目。 3. 在项目中创建一个新的QWidget。 4. 将osgQOpenGLWidget添加到此QWidget中。您可以通过包含头文件“osgQOpenGLWidget.h”来实现此操作。 5. 在QWidget的构造函数中,创建一个osgViewer::Viewer对象,并将osgQOpenGLWidget设置为该对象的视口。 6. 创建一个osg::Node对象并将其添加到osgViewer::Viewer对象中。 7. 在QWidget的paintEvent中,调用osgViewer::Viewer对象的frame方法。 8. 使用show方法显示QWidget。 以下是一个示例代码片段,演示了如何将osgQOpenGLWidget嵌入Qt中: ```c++ #include "osgQOpenGLWidget.h" #include <osgViewer/Viewer> #include <osgDB/ReadFile> class OSGWidget : public QWidget { public: OSGWidget(QWidget* parent = nullptr) : QWidget(parent) { osgViewer::Viewer* viewer = new osgViewer::Viewer; osgQOpenGLWidget* osgWidget = new osgQOpenGLWidget(this); osgWidget->setMinimumSize(640, 480); osgWidget->setFocusPolicy(Qt::ClickFocus); osgWidget->setViewer(viewer); setCentralWidget(osgWidget); osg::Node* model = osgDB::readNodeFile("cow.osg"); viewer->setSceneData(model); viewer->realize(); } protected: void paintEvent(QPaintEvent* event) override { QWidget::paintEvent(event); osgQOpenGLWidget* osgWidget = dynamic_cast<osgQOpenGLWidget*>(centralWidget()); if (osgWidget) { osgWidget->getViewer()->frame(); } } }; ``` 请注意,此示例仅演示了如何将osgQOpenGLWidget嵌入Qt中,并显示一个osg::Node对象。您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值