crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> новичок + qwt
_Vitaliy_
  опции профиля:
сообщение 10.12.2009, 18:11
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Доброго времени суток уважаемое комьюнити.
Помогите неопытному (надеюсь пока) новичку побороть qwt.
Есть код:
Раскрывающийся текст

#include <QtGui/QStandardItemModel>

#include "obrabotka.h"
#include "mainwindow.h"

#include <qwt_plot.h>
#include <qwt_plot_marker.h>
#include <qwt_plot_curve.h>
#include <qwt_legend.h>
#include <qwt_data.h>
#include <qwt_text.h>
#include <qwt_math.h>

#include <qwt_scale_widget.h>
#include <qwt_painter.h>
#include <qwt_plot_canvas.h>

#include <math.h>

obrabotka::obrabotka(QWidget *parent)
        :QDialog(parent)
{

}

obrabotka::~obrabotka()
{
}

void obrabotka::obra()
{

}

void obrabotka::setModel(QStandardItemModel *model)
{
    m_model = model;

        QList<double> x0, x1, x2, x3;
        int Size = m_model->rowCount();
        double X0[Size], X1[Size], X2[Size], X3[Size];


    for (int i = 0; i < m_model->rowCount(); i++) {
                x0.append(m_model->item(i, 0)->text().toDouble());
                x1.append(m_model->item(i, 1)->text().toDouble());
                x2.append(m_model->item(i, 2)->text().toDouble());
              
    }

        for (int i = 0; i < m_model->rowCount(); i++) {
                X0[i] = x0[i];
                X1[i] = x1[i];
                X2[i] = x2[i];
        }

//******* Grafiki *****
    QwtPlot *myPlot = new QwtPlot(tr("Grafiki zavisimosti parametrov ot vremeni"), this);
    
    // add curves
    QwtPlotCurve *curve1 = new QwtPlotCurve("H ot T");
    curve1->setRenderHint(QwtPlotItem::RenderAntialiased);
    QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2");

        // Axis of plot
        myPlot->setAxisTitle(QwtPlot::xBottom, "Time/seconds");
        myPlot->setAxisTitle(QwtPlot::yLeft, "Height/meters");
      
    curve1->setPen(QPen(Qt::red));
    curve2->setPen(QPen(Qt::blue));

    curve1->setData(X0,X1,Size);
    curve2->setData(X0,X2,Size);

    curve1->attach(myPlot);
    curve2->attach(myPlot);

    // finally, refresh the plot
    myPlot->resize(600, 500);
    myPlot->replot();
//*************
}


Вроде сам график выводить научился, образования хватило... а дальше темный лес.
Необходимо:
1. График должен растягиваться на все окно (окно, в котором он выводится) и при изменении размеров окна он тоже должен изменяться. Вроде нужно было правильно унаследовать: QwtPlot *myPlot = new QwtPlot(tr("Grafiki zavisimosti parametrov ot vremeni"), this) но у меня не получилось. В примере simpleplot это вроде понятно, хотя я могу и ошибаться...
Раскрывающийся текст

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    Plot plot;
#if QT_VERSION < 0x040000
    a.setMainWidget(&[b]plot)[/b];
#endif
    plot.resize(600,400);
    plot.show();
    return a.exec();
}


а когда несколько окон, как у меня, я честно говоря недопонимаю...

2. Т.к. ось Х в идеале имеет значение в несколько тысяч единиц, то необходим "скролл", примеры смотрел но не понял. Тем более что графиков планируется около 7 то соответственно они должны "скролироваться" все одновременно.
3. Нужно выводить значение на графике при наведении на него мышкой.
4. При необходимости изменять масштаб. Соответственно чтобы графики между собой не плыли и соответствовали между собой по оси Х.

Знаю что хочу слишком много и сразу, но был бы признателен за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.12.2009, 19:06
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(_Vitaliy_ @ 10.12.2009, 21:11) *
График должен растягиваться на все окно (окно, в котором он выводится) и при изменении размеров окна он тоже должен изменяться.
это не относится к Qwt, это относится к компоновщикам Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
azure
  опции профиля:
сообщение 25.12.2009, 16:31
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(_Vitaliy_ @ 10.12.2009, 17:11) *
2. Т.к. ось Х в идеале имеет значение в несколько тысяч единиц, то необходим "скролл", примеры смотрел но не понял. Тем более что графиков планируется около 7 то соответственно они должны "скролироваться" все одновременно.
3. Нужно выводить значение на графике при наведении на него мышкой.
4. При необходимости изменять масштаб. Соответственно чтобы графики между собой не плыли и соответствовали между собой по оси Х.

Знаю что хочу слишком много и сразу, но был бы признателен за помощь.


2. на счет скролла - это в примерах qwt было где-то. пробуйте оттуда изъять и применить к себе. скроллироваться будет только полотно графика, а линии (хоть тыща) будут соответственно тоже сколлиться, ибо они лежат на полотне.
3. выводить значения - это копайте в сторону QwtPlotPicker. в примерах используется, разбирайтесь
4. QwtPlotZoom
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 26.12.2009, 15:22
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(azure @ 25.12.2009, 16:31) *
Цитата(_Vitaliy_ @ 10.12.2009, 17:11) *
2. Т.к. ось Х в идеале имеет значение в несколько тысяч единиц, то необходим "скролл", примеры смотрел но не понял. Тем более что графиков планируется около 7 то соответственно они должны "скролироваться" все одновременно.
3. Нужно выводить значение на графике при наведении на него мышкой.
4. При необходимости изменять масштаб. Соответственно чтобы графики между собой не плыли и соответствовали между собой по оси Х.

Знаю что хочу слишком много и сразу, но был бы признателен за помощь.


2. на счет скролла - это в примерах qwt было где-то. пробуйте оттуда изъять и применить к себе. скроллироваться будет только полотно графика, а линии (хоть тыща) будут соответственно тоже сколлиться, ибо они лежат на полотне.
3. выводить значения - это копайте в сторону QwtPlotPicker. в примерах используется, разбирайтесь
4. QwtPlotZoom


Выводить значения я уже научился, а вот необходимого скролла, в примерах к сожалению нет... В примерах есть определенное (константа) значение по осям, график выводится по этой константе, и только при изменении масштаба появляется скролл. А надо чтобы выводилось например 500 единиц и был скролл чтобы пролистать оставшиеся например 5000 единиц...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
azure
  опции профиля:
сообщение 28.12.2009, 15:25
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(_Vitaliy_ @ 26.12.2009, 14:22) *
Выводить значения я уже научился, а вот необходимого скролла, в примерах к сожалению нет... В примерах есть определенное (константа) значение по осям, график выводится по этой константе, и только при изменении масштаба появляется скролл. А надо чтобы выводилось например 500 единиц и был скролл чтобы пролистать оставшиеся например 5000 единиц...

в любом случае тебе придется иметь дело с масштабированием. Вначале вывести все на график, потом приблизить, потом уже можно будет проматывать. Если найдете как можно сделать иначе - отпишитесь в теме, мне тоже любопытен этот момент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 29.12.2009, 10:23
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(azure @ 28.12.2009, 15:25) *
Цитата(_Vitaliy_ @ 26.12.2009, 14:22) *
Выводить значения я уже научился, а вот необходимого скролла, в примерах к сожалению нет... В примерах есть определенное (константа) значение по осям, график выводится по этой константе, и только при изменении масштаба появляется скролл. А надо чтобы выводилось например 500 единиц и был скролл чтобы пролистать оставшиеся например 5000 единиц...

в любом случае тебе придется иметь дело с масштабированием. Вначале вывести все на график, потом приблизить, потом уже можно будет проматывать. Если найдете как можно сделать иначе - отпишитесь в теме, мне тоже любопытен этот момент.

вывести и приближать уже умеем, а вот проматывать пока никак, если у вас есть наметки то буду признателен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
azure
  опции профиля:
сообщение 29.12.2009, 14:17
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 24.12.2009
Пользователь №: 1332

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(_Vitaliy_ @ 29.12.2009, 9:23) *
вывести и приближать уже умеем, а вот проматывать пока никак, если у вас есть наметки то буду признателен

я пользовал QwtPlotPanner, но это для панорамирования мышкой, скроллбаров при этом не отображается. если вам надо - то вы разберетесь по примеру realtime_plot из состава qwt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.10.2021, 11:03