crossplatform.ru

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

TiiL
  опции профиля:
сообщение 1.3.2012, 9:34
Сообщение #1


Участник
**

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

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




Репутация:   0  


Сначала о струтуре всего что делаю:
1-ое запускается приложение, по нажатию кнопки гоу запускается функция допустим fat(), какими нибудь параметрами.
2-ое функция fat() находиться в библиотеке(созданная для множества приложений), в ней ведутся вычисления, в своё время после вычислений функция вызывает функцию plot()(которая рисует графики).
вот и подошел к вопросу: поясните мне ,как подключить мою функцию plot в эту библиотеку:

что получается, разработал приложение на qwt которое рисует графики:
структура моего приложения:
Раскрывающийся текст

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
    ui(new Ui::MainWindow)
{    
    ui->setupUi (this);
    ui->myPlot->setTitle (QString::fromLocal8Bit ("Графики"));

    grid = new QwtPlotGrid;
    grid->enableXMin (true);
    grid->enableYMin (true);

    grid->setMajPen (QPen(Qt::black,0,Qt::DotLine));
    grid->setMinPen (QPen(Qt::gray,0,Qt::DotLine));
    grid->attach (ui->myPlot);

    ui->myPlot->canvas ()->setCursor (Qt::ArrowCursor);

    curv1 = new QwtPlotCurve(QString::fromLocal8Bit("exp(x)"));
    curv1->setRenderHint(QwtPlotItem::RenderAntialiased);
    curv1->setPen(QPen(Qt::red));

    symbol1 = new QwtSymbol();
    symbol1->setStyle (QwtSymbol::Ellipse);
    symbol1->setPen (QColor(Qt::black));
    symbol1->setSize (5);
    curv1->setSymbol (symbol1);

    curv2 = new QwtPlotCurve(QString::fromLocal8Bit ("X*X+3X"));
    curv2->setRenderHint (QwtPlotItem::RenderAntialiased);
    curv2->setPen (QPen(Qt::green));

    symbol2 = new QwtSymbol();
    symbol2->setStyle (QwtSymbol::Rect);
    symbol2->setPen (QColor(Qt::blue));
    symbol2->setSize (5);
    curv2->setSymbol (symbol2);

    leg = new QwtLegend();
    leg->setItemMode(QwtLegend::ReadOnlyItem);
    ui->myPlot->insertLegend(leg,QwtPlot::TopLegend);

    plot_fat();

    ui->myPlot->replot ();

}


имитация функции fat()
Раскрывающийся текст

void MainWindow::plot_fat ()
{
    const int N = 13;
    int n;
    int numberCurve;   
    
    double x[N+1]={1,2,3,6,8,9,11,12,13,14,18,21,22};
    //double x[N+1]={-10,-7,-6,-5,-4, -2,-1,0, 2,3,6,9,10};
    double y[N+1];
    double x2[N+1];
    double y2[N+1];
    double AxisXmax = 0;
    double AxisXmin = 0;
    double AxisYmax = 0;
    double AxisYmin = 0;
    double errorX;
    for(int k = 0; k < N; k++ )
    {

    y[k]=exp(x[k]); //первый график

    x2[k]= x[k]+ 2;
    y2[k]=x2[k]*x[k] + 3 * x2[k];  //exp(x2[k]); //второй график

//определяем минимум макимум х и у
    if(x[k] > AxisXmax) AxisXmax = x[k]; 

    if(x[k] < AxisXmin) AxisXmin = x[k];

    if(y[k] < AxisYmin) AxisYmin = y[k];

    if(y[k] > AxisYmax) AxisYmax = y[k];  

    if(x[k] < 0 ) errorX = x[k];
    }

    numberCurve = 1;

    n = plot_first(AxisXmax,AxisXmin,AxisYmax,AxisYmin,errorX,x,y,N,numberCurve);
    if( n == 0 )
    {
        numberCurve++;
        for(int k=0; k < N; k++)
        {
        x[k]=x2[k];
        y[k]=y2[k];
        }
        n = plot_next(x,y,N,numberCurve);
    }

}

имитация функции plot
Раскрывающийся текст
int MainWindow::plot_first (double AxisXmax, double AxisXmin, double AxisYmax, double AxisYmin, double errorX, double *x, double *y, const int N, int numberCurve)
{
////опре деление в каких осях рисовать в логарифмических или линейных
    //qDebug("1 i = %i", i);

    if(!ui->Log10X->isChecked () && !ui->Log10Y->isChecked ())
    {
        if(i == 1)
        {
            ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft, new QwtLog10ScaleEngine);
            ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom, new QwtLog10ScaleEngine);
            ui->Log10X->setChecked (true);
            ui->Log10Y->setChecked (true);
            AxisYmin=1;
            AxisXmin=1;
            if(errorX<0)
            {
                QMessageBox::warning (this,tr("Warning"),tr("There are negative values"));
            }
        }
        if(i == 2)
        {
            ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft, new QwtLinearScaleEngine);
            ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom, new QwtLinearScaleEngine);
        }
    }else
    {
        if(ui->Log10X->isChecked ()) AxisXmin=0.1;
        if(ui->Log10Y->isChecked ()) AxisYmin=0.1;
    }

    ui->myPlot->setAxisTitle(
        QwtPlot::xBottom,QString::fromLocal8Bit("X"));
    ui->myPlot->setAxisScale(QwtPlot::xBottom, AxisXmin, AxisXmax);

    ui->myPlot->setAxisTitle(
        QwtPlot::yLeft,QString::fromLocal8Bit("Y"));
    ui->myPlot->setAxisScale(QwtPlot::yLeft, AxisYmin, AxisYmax);

    showData(x,y,N,numberCurve);

    ui->myPlot->replot ();
    return 0;
}

int MainWindow::plot_next (double *x, double *y, const int N, int numberCurve)
{
    showData(x,y,N, numberCurve);
    ui->myPlot->replot ();
    return 1;
}



как я всё это вижу я должен разделить своё приложение на 1-ое диалоговое окно в котором всё это рисуется, 2-ое на функции которые рисуют сами линии графиков,

какой функцией будет запускать моё диологовое окно этого для меня загадка(

PS Извените если что не понятно, если что задавайте вопросы. буду отвечать

Сообщение отредактировал TiiL - 1.3.2012, 9:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 21.5.2025, 17:52