[转][osg][QT]osg与QT界面结合的简单例子
- //QT += core gui opengl
- //LIBS += -losgViewer -losgDB -losgUtil -losg -lOpenThreads -losgGA -losgQt
- #include <QtGui/QApplication>
- #include <osg/ArgumentParser>
- #include <osgViewer/Viewer>
- #include <osgViewer/CompositeViewer>
- #include <osgViewer/ViewerEventHandlers>
- #include <osgGA/TrackballManipulator>
- #include <osgDB/ReadFile>
- #include <QtCore/QString>
- #include <QtCore/QTimer>
- #include <QtGui/QKeyEvent>
- #include <QtGui/QApplication>
- #include <QtOpenGL/QGLWidget>
- #include <QtGui/QMainWindow>
- #include <QtGui/QMdiSubWindow>
- #include <QtGui/QMdiArea>
- #include <iostream>
- using Qt::WindowFlags;
- class AdapterWidget:public QGLWidget
- {
- public:
- AdapterWidget(QWidget *parent=,const char* name=,const QGLWidget * shareWidget=,WindowFlags f=);
- virtual ~AdapterWidget()
- {
- }
- osgViewer::GraphicsWindow* getGraphicsWindow()
- {
- return _gw.get();
- }
- const osgViewer::GraphicsWindow* getGraphicsWidow()const
- {
- return _gw.get();
- }
- protected:
- void init();
- virtual void resizeGL(int width,int height);
- virtual void keyPressEvent(QKeyEvent* event);
- virtual void keyReleaseEvent(QKeyEvent* event);
- virtual void mousePressEvent(QMouseEvent* event);
- virtual void mouseReleaseEvent(QMouseEvent* event);//
- virtual void mouseMoveEvent(QMouseEvent* event);
- osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw;
- };
- AdapterWidget::AdapterWidget(QWidget *parent,const char* name,const QGLWidget * shareWidget,WindowFlags f):QGLWidget(parent,shareWidget,f)
- {
- _gw=new osgViewer::GraphicsWindowEmbedded(,,width(),height());
- setFocusPolicy(Qt::ClickFocus);
- }
- void AdapterWidget::resizeGL(int width, int height)
- {
- _gw->getEventQueue()->windowResize(,,width,height);
- _gw->resized(,,width,height);
- }
- void AdapterWidget::keyPressEvent(QKeyEvent* event)
- {
- //_gw->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) *(event->text().toAscii().data() ) );
- _gw->getEventQueue()->keyPress((osgGA::GUIEventAdapter::KeySymbol)*(event->text().toLatin1().data()));//qt5
- }
- void AdapterWidget::keyReleaseEvent(QKeyEvent* event)
- {
- //_gw->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol)*(event->text().toAscii().data()));
- _gw->getEventQueue()->keyRelease((osgGA::GUIEventAdapter::KeySymbol)*(event->text().toLatin1().data()));//qt5
- }
- void AdapterWidget::mousePressEvent(QMouseEvent* event)
- {
- int button=;
- switch (event->button())
- {
- case(Qt::LeftButton):
- button=;
- break;
- case (Qt::MidButton):
- button=;
- break;
- case (Qt::RightButton):
- button=;
- break;
- case (Qt::NoButton):
- button=;
- break;
- default:
- button=;
- break;
- }
- _gw->getEventQueue()->mouseButtonPress(event->x(),event->y(),button);
- }
- void AdapterWidget::mouseReleaseEvent( QMouseEvent* event )
- {
- int button = ;
- switch(event->button())
- {
- case(Qt::LeftButton):
- button = ;
- break;
- case(Qt::MidButton):
- button = ;
- break;
- case(Qt::RightButton):
- button = ;
- break;
- case(Qt::NoButton):
- button = ;
- break;
- default:
- button = ;
- break;
- }
- _gw->getEventQueue()->mouseButtonRelease(event->x(), event->y(), button);
- }
- void AdapterWidget::mouseMoveEvent(QMouseEvent* event)
- {
- _gw->getEventQueue()->mouseMotion(event->x(),event->y());
- }
- class ViewerQT : public osgViewer::Viewer, public AdapterWidget
- {
- public:
- ViewerQT(QWidget * parent=,const char * name=,const QGLWidget * shareWidget=,WindowFlags f=):AdapterWidget(parent ,name,shareWidget ,f)
- {
- getCamera()->setViewport(new osg::Viewport(,,width(),height()));
- getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width())/static_cast<double>(height()), 1.0f, 10000.0f);
- getCamera()->setGraphicsContext(getGraphicsWindow());
- setThreadingModel(osgViewer::Viewer::SingleThreaded);
- connect(&_timer,SIGNAL(timeout()),this,SLOT(updateGL()));//并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。
- _timer.start();//使用start()来开始
- }
- virtual void paintGL()
- {
- frame();
- }
- protected:
- QTimer _timer;
- };
- int main(int argc,char** argv)
- {
/*
QTextCodec *xcodec = QTextCodec::codecForLocale();
QString exeDir = xcodec->toUnicode(QByteArray(argv[0]));
QString BKE_CURRENT_DIR = QFileInfo(exeDir).path();
QStringList libpath;
libpath << BKE_CURRENT_DIR + QString::fromLocal8Bit("/plugins/platforms");
libpath << BKE_CURRENT_DIR << BKE_CURRENT_DIR + QString::fromLocal8Bit("/plugins/imageformats");
libpath << BKE_CURRENT_DIR + QString::fromLocal8Bit("/plugins");
libpath << QApplication::libraryPaths();
QApplication::setLibraryPaths(libpath);
//以上是跑qt的环境变量
- */
- QApplication a(argc,argv);
- osg::ref_ptr<osg::Node> loadedModel=osgDB::readNodeFile("cow.osg");
- ViewerQT * ViewerWindow=new ViewerQT;
- ViewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
- ViewerWindow->setSceneData(loadedModel.get());
- QMainWindow* mw=new QMainWindow();
- mw->showMaximized();
- mw->setCentralWidget(ViewerWindow);
- mw->show();
- a.connect(&a,SIGNAL(lastWindowClosed()),&a,SLOT(quit()));
- return a.exec();
- }
转自:https://www.cnblogs.com/sangzaohaishui/p/4687771.html
注意:QGLWidget使用的库是:Qt5OpenGL.lib
[转][osg][QT]osg与QT界面结合的简单例子的更多相关文章
- [原][osg][QT]osg与QT界面结合的简单例子二
//main.cpp #include "VREObliqueEditorQTWindow.h" #include <QtWidgets/QApplication> # ...
- Robot Framework与Web界面自动化测试:简单例子
假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...
- Qt osg QWidget osgViewer::Viewer
osgViewer::Viewer* _viewer = nullptr; _viewer = new osgViewer::Viewer;osg::ref_ptr<osg::Group> ...
- 用Qt写软件系列三:一个简单的系统工具之界面美化
前言 在上一篇中,我们基本上完成了主要功能的实现,剩下的一些导出.进程子模块信息等功能,留到后面再来慢慢实现.这一篇来讲述如何对主界面进行个性化的定制.Qt库提供的只是最基本的组件功能,使用这些组件开 ...
- qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新
qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...
- Qt 地址薄 (一) 界面设计
实现一个简单的地址薄,功能包括:地址的添加.浏览.编辑.查找.输出文件等. 1 界面和元素 整个地址薄界面,可视为一个 AddressBook 类.其中的 Name.Address 以及两个编辑栏, ...
- qml(Qt Quick)做界面
qml(Qt Quick)做界面 来源 https://www.zhihu.com/question/24880681/answer/29324824 本人是Qt初学者,正在写一个会计小软件(Lin ...
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)
本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...
- Qt常用的登录界面设计
记录一下Qt常用的登录界面的设计 方便以后使用! 1.QpushButton改变一个按钮的颜色,当鼠标放上去和移开时显示不同的颜色.QPushButton { background-color: rg ...
随机推荐
- ManyToManyField 增加记录
class BOMView(View): def get(self,request): obj=BOMForm() return render(request,'bom.html',{'obj':ob ...
- 小程序 canvas实现图片预览,图片保存
wxml 代码: <view class="result-page"> <canvas bindtap="previewImage" canv ...
- yii2项目中运行composer 过程中遇到的问题
问题1: Your requirements could not be resolved to an installable set of packages 则表明 未安装fxp/composer-a ...
- 13:python-ldap
1.1 python-ldap 基本使用 11111111111111111111
- linux 计划任务 crontab 简单用法
添加计划任务: 方法1: crontab -e 方法2: vim /etc/crontab #这种方式进去的文件有个sample可供参考 查看已经启动的任务:crontab -l 查看运行状态:ser ...
- centos 设置时间为北京时间
https://www.cnblogs.com/biaopei/p/7730462.html
- 数据库 --- 4 多表查询 ,Navicat工具 , pymysql模块
一.多表查询 1.笛卡儿积 查询 2.连接 语法: ①inner 显示可构成连接的数据 mysql> select employee.id,employee.name,department ...
- Android灯光系统--通知灯深入分析【转】
本文转自:https://www.cnblogs.com/lkq1220/p/6406261.html Android灯光系统--通知灯深入分析 通知的类别 声音 振动 闪灯 APP如何发出通知灯请求 ...
- bzoj1458: 士兵占领 网络流
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1458 也可以去luogu 思路 想成倒着删去点,使得依旧满足覆盖!! 左边横,右边列,之间用 ...
- Docker Tomcat远程部署到容器
一:创建一个开启远程部署的tomcat容器 tomcat角色配置 1.tomcat开启远程部署,修改conf/tomcat-users.xml <?xml version="1.0&q ...