Files
tactileipc3d/main.cpp
2025-12-18 09:19:39 +08:00

75 lines
2.3 KiB
C++

#include <QApplication>
#include <QPushButton>
#include <QMainWindow>
#include <QSplitter>
#include <QQuickWidget>
#include <QQmlContext>
#include <QQuickWindow>
#include <QSGRendererInterface>
#include <QTimer>
#include <QRandomGenerator>
#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<float> 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();
}