QT5 - 同一 window 中的多个 OpenGL 小部件
QT5 - multiple OpenGL widgets in the same window
我使用 OpenGL ES 开发了一个基本的图形引擎监控应用程序。它绘制基本的 2D 几何图形。我有兴趣将其移植到 QT5 以实现跨平台的可比性。
我想将每个仪表变成一个单独的小部件,它有自己的信号和插槽。 QT 提供了关于如何制作 OpenGL 小部件的很好的 example。但是,此方法会为每个小部件创建一个新的 window。它有一种方法可以使每个仪表成为自己的小部件并将它们全部绘制在同一个 window?
QOpenGLWidget 是一个小部件,因此您可以将它放在另一个小部件中,在创建单个小部件的示例中,这将是 window。您可以创建一些 QMainWindow、QDialog 或 QWidget,并在其中放置一个 QOpenGLWidget,下面是一个示例,只需将此 main 替换为 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();
}
输出:
我使用 OpenGL ES 开发了一个基本的图形引擎监控应用程序。它绘制基本的 2D 几何图形。我有兴趣将其移植到 QT5 以实现跨平台的可比性。
我想将每个仪表变成一个单独的小部件,它有自己的信号和插槽。 QT 提供了关于如何制作 OpenGL 小部件的很好的 example。但是,此方法会为每个小部件创建一个新的 window。它有一种方法可以使每个仪表成为自己的小部件并将它们全部绘制在同一个 window?
QOpenGLWidget 是一个小部件,因此您可以将它放在另一个小部件中,在创建单个小部件的示例中,这将是 window。您可以创建一些 QMainWindow、QDialog 或 QWidget,并在其中放置一个 QOpenGLWidget,下面是一个示例,只需将此 main 替换为 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();
}
输出: