QT5 - 同一窗口中的多个OpenGL小部件

时间:2017-12-01 20:01:12

标签: c++ qt opengl-es qt4 qt5

我使用OpenGL ES开发了一个基本的图形引擎监控应用程序。它绘制基本的2D几何体。我有兴趣将其移植到QT5以获得跨平台的可比性。

我希望将每个仪表变成一个独立的小部件,并带有它自己的信号和插槽。 QT提供了一个很好的example如何制作OpenGL小部件。但是,此方法为每个窗口小部件创建一个新窗口。有一种方法可以让每个人都自己控制它并在同一个窗口中绘制它们吗?

以下是申请参考的图片。

enter image description here

1 个答案:

答案 0 :(得分:0)

QOpenGLWidget是一个小部件,因此您可以将其放在另一个小部件中,在创建单个小部件的示例中,这将是窗口。您可以创建一些QMainWindow,QDialog或QWidget,并在其中放置一个QOpenGLWidget,以下是如何执行此操作的示例,只需将此main替​​换为主示例:

#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