方式一:继承QOpenGLWidget
核心源码:
.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets opengl
greaterThan(QT_MAJOR_VERSION,5):QT += openglwidgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
form.cpp \
main.cpp \
main.cpp \
graphicswindowqt.cpp
HEADERS += \
form.h \
graphicswindowqt.h
INCLUDEPATH += F:/osgEarth/osgt/osg365/include
DEPENDPATH += F:/osgEarth/osgt/osg365/include
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
CONFIG(debug,debug|release){
LIBS += -LF:\osgEarth\osgt\osg365\lib \
-lOpenThreadsd \
-losgd -losgDBd \
-losgGAd \
-losgUtild \
-losgViewerd
}else {
LIBS += -LF:\osgEarth\osgt\osg365\lib \
-lOpenThreads \
-losg \
-losgDB \
-losgGA \
-losgUtil \
-losgViewer \
}
FORMS += \
form.ui
.h文件
#ifndef GRAPHICSWINDOWQT_H
#define GRAPHICSWINDOWQT_H
#include <QOpenGLWidget>
#include <osgViewer/Viewer>
#include <osgViewer/GraphicsWindow>
class QInputEvent;
class GraphicsWindowQt : public QOpenGLWidget, public osgViewer::Viewer
{
Q_OBJECT
public:
GraphicsWindowQt(QWidget *parent = 0);
~GraphicsWindowQt();
bool event(QEvent *e);
void setKeyboardModifiers(QInputEvent *event);
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
void resizeEvent(QResizeEvent *event);
void moveEvent(QMoveEvent *event);
void timerEvent(QTimerEvent *);
protected:
virtual void paintGL();
private:
void init3D();
osg::ref_ptr<osg::Camera> createCamera(int x,int y,int w,int h);
private:
osg::ref_ptr<osg::Group> root;
osgViewer::GraphicsWindow *window;
};
#endif // GRAPHICSWINDOWQT_H