2017-12-01 4 views
0

OpenGL ES를 사용하여 기본 그래픽 엔진 모니터링 응용 프로그램을 개발했습니다. 기본 2D 지오메트리를 그립니다. 크로스 플랫폼 비교 가능성에 대해 QT5로 이식하는 데 관심이 있습니다.QT5 - 동일한 창에 여러 개의 OpenGL 위젯이 있습니다.

각 게이지를 자체 신호와 슬롯이있는 개별 위젯으로 바꾸고 싶습니다. QT는 OpenGL 위젯을 만드는 방법에 대해 좋은 example을 제공합니다. 그러나이 메서드는 각 위젯에 대해 새 창을 만듭니다. 거기에는 각 게이지를 자신의 위젯으로 만들고 같은 창에서 모두 그릴 수있는 방법이 있습니까?

다음은 참조 용 응용 프로그램 사진입니다.

enter image description here

답변

0

QOpenGLWidget는 하나의 위젯이 창 것을 만들 때의 예에서, 다른 위젯 내부에 배치 할 수 있도록 위젯입니다. 당신은 어떤 QMainWindow, 인 QDialog 또는는 QWidget과 그 안에의 장소 QOpenGLWidget를 만들 수 있습니다, 다음이 작업을 수행하는 방법의 예입니다, 단지 주 예를 들어이 주를 대체 :

#include <QApplication> 
#include <QDialog> 
#include <QLabel> 
#include <QSurfaceFormat> 
#include <QVBoxLayout> 

#ifndef QT_NO_OPENGL 
#include "mainwidget.h" 
#endif 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QSurfaceFormat format; 
    format.setDepthBufferSize(24); 
    QSurfaceFormat::setDefaultFormat(format); 

    app.setApplicationName("cube"); 
    app.setApplicationVersion("0.1"); 
#ifndef QT_NO_OPENGL 
    QDialog w; 
    QHBoxLayout *lay = new QHBoxLayout(&w); 
    QHBoxLayout *hlay = new QHBoxLayout; 
    hlay->addWidget(new MainWidget(&w)); 
    hlay->addWidget(new MainWidget(&w)); 
    QVBoxLayout *vlay = new QVBoxLayout; 
    vlay->addLayout(hlay); 
    vlay->addWidget(new MainWidget(&w)); 
    lay->addWidget(new MainWidget(&w)); 
    lay->addLayout(vlay); 
    w.resize(640, 480); 
    w.show(); 
#else 
    QLabel note("OpenGL Support required"); 
    note.show(); 
#endif 
    return app.exec(); 
} 

출력 :

enter image description here

+0

QT Quick를 사용하여이 두 가지를 모두 다시 그리는 것이 기본적인 2D 모양이기 때문에 더 적합할까요? – user8908459

+0

@ user8908459 Qt Quick는 Qt C++과 다른데, Qt가 제공하는 몇 가지 옵션 중 하나입니다. 따라서 대답은 다음과 같을 수 있습니다. 다른 한편으로 내 대답이 도움이된다면 그것을 옳은 것으로 표시하는 것을 잊지 마십시오. – eyllanesc

관련 문제