Я сделал пока через qwt. Сделал класс производный от QwtPlot. Расположил виджет на форме. В классе есть метод, через который передаются массивы (С-массивы - int*) X- и Y-значений. Потом заношу их так
QwtPlotCurve::setRawData(m_dX1, m_dY1, nNumUsedPoints). Для навигации и масштабирования по спектру использую классы
QwtPlotPicker QwtPlotPanner QwtPlotZoomer.
Свой класс писал на основе примеров, поставляемых с библиотекой. Вобщем-то все это работает на ура когда 50-100 точек.... А когда 20000 - вообще все виснет при увеличении масштаба... Видимо Qwt не предназначен для такого...
Свой виджет тоже где-то когда-то писал... Но насколько помню был затык как сделать правильно и грамотно масштабирование при выделении квадрата мышью.
А с QGraphicsScene вообще куча всего непонятного и ощущение что реально проще свой виджет писать чем использовать QGraphicsView. А именно:
1. Неясно как зафиксировать сетку (которая foreground grid) при масштабировании.
2. Неясно как сделать подписи на этой сетке.
3. Неясно как реализовать масштабирование не колесиком мыши - а при выделении квадрата мышью.
4. Неясно как сделать перемещение по графику (когда он не влезает в виджет) не с помощью скрол-баров, которые сами появляются, а опять-таки с помощью мыши....
5. Непонятно как правильно очищать сцену перед отрисовкой новой инфы...
Последнее получилось так
QGraphicsScene *pGraphicsScene = m_pSpectrPlot->scene();
delete pGraphicsScene;
pGraphicsScene = new QGraphicsScene;
m_pSpectrPlot->setScene(pGraphicsScene);
Правильно ли это? Фиг знает, по другому не нашел как....
Касаемо пунктов 1-4 видимо нужно делать сабклассинг и самому переписывать QPaintEvent.... Но неясно тогда в чем фишка QGraphicsView... Вобщем, вот такие мысли... Несколько дней думаю, пока ощущение что нужно либо самому писать виджет, производный от QWidget и в нем ловить QPaintEvent и все что нужно делать... Либо завязываться на OpenGL... Последнее интереснее конечно... Но вот интересно, можно ли 2D графики на нем рисовать.... Нужно разбираться вобщем...