#include #include #include #include #include #include #include #include #include #include #include "backend.h" #include "backend.h" #include "glwidget.h" int main(int argc, char *argv[]) { QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL); // 统一OpenGL格式 QSurfaceFormat fmt; fmt.setVersion(3, 3); fmt.setProfile(QSurfaceFormat::CoreProfile); fmt.setDepthBufferSize(24); fmt.setStencilBufferSize(8); fmt.setSamples(4); fmt.setSwapInterval(1); QSurfaceFormat::setDefaultFormat(fmt); QApplication a(argc, argv); auto *win = new QMainWindow; auto *splitter = new QSplitter; splitter->setOrientation(Qt::Horizontal); auto *quick = new QQuickWidget; quick->setResizeMode(QQuickWidget::SizeRootObjectToView); Backend backend; quick->rootContext()->setContextProperty("backend", &backend); quick->setSource(QUrl("qrc:/qml/Main.qml")); auto *glw = new GLWidget; glw->setSpec(8, 11, 0.1f, 0.03f); glw->setPanelThickness(0.08f); glw->setRange(backend.minValue(), backend.maxValue()); glw->setRenderModeString(backend.renderMode()); glw->setLabelModeString(backend.labelMode()); QObject::connect(&backend, &Backend::rangeChanged, glw, &GLWidget::setRange); QObject::connect(&backend, &Backend::renderModeValueChanged, glw, &GLWidget::setRenderModeString); QObject::connect(&backend, &Backend::labelModeValueChanged, glw, &GLWidget::setLabelModeString); auto *t = new QTimer(win); t->setTimerType(Qt::PreciseTimer); t->setInterval(10); QObject::connect(t, &QTimer::timeout, glw, [glw] { const int n = glw->dotCount(); QVector v; v.resize(n); for (int i = 0; i < n; ++i) { // TODO: value v[i] = 100.0f + float(QRandomGenerator::global()->generateDouble()) * (2000.0f - 100.0f); } glw->submitValues(v); }); splitter->addWidget(quick); splitter->addWidget(glw); splitter->setStretchFactor(0, 0); splitter->setStretchFactor(1, 1); win->setCentralWidget(splitter); win->resize(1100, 650); win->show(); t->start(); return QApplication::exec(); }