Russian Qt Forum

Qt => Вопросы новичков => Тема начата: tiiL от Март 22, 2012, 14:08



Название: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 22, 2012, 14:08
Создаю библиотеку грубо говорят библиотека состоит из двух основных файлов

plot_fat.cpp:
Код:
#include <mainwindow.h> // здесь объявленна plot_first 
int   plot_fat ( int spec_qty, SPEC_DATA *s, CURVE *c )
{
 вычисления...
n= plot_first("передаются какие то параметры вычисления")

}

mainwindow.h:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QtGui>
#include<QMainWindow>
//#include <qmainwindow.h>
#include <QMessageBox>
#include <QFile>
//#include <QtCore/QObject>

//хедеры qwt
#include <qwt_plot_canvas.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
#include <qwt_symbol.h>
#include <qwt_scale_engine.h>
#include <qwt_legend.h>
//

namespace Ui{
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent =0 );
    ~MainWindow();
    void plot_fat();
    int plot_first(double AxisXmax,
                    double AxisXmin,
                    double AxisYmax,
                    double AxisYmin,
                    double errorX,
                    double *x, double *y,
                    const int N, int numberCurve);
    int plot_next(double *x, double *y,
                  const int N, int numberCurve);
    void showData(double *x, double *y,
                  /*double *x2, double *y2*/
                  const int N,int numberCurve);
    int i;

private:
    Ui::MainWindow *ui;
protected:
    QwtPlotGrid *grid;
    QwtPlotCurve *curv1,*curv2;
    QwtSymbol *symbol1, *symbol2;
    QwtLegend *leg;

    QMessageBox *error;

private slots:
    void on_Log10X_toggled();
    void on_Log10Y_toggled();

};
#endif // MAINWINDOW_H

и вылезают такие ошибки:

In file included from ..\..\Qt\2010.05\qt\include/QtCore/qshareddata.h:1,

 from ..\..\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qsharedpointer.h:47,

 from ..\..\Qt\2010.05\qt\include/QtCore/qsharedpointer.h:1,

 from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/image/qpixmap.h:49,

 from ..\..\Qt\2010.05\qt\include/QtGui/qpixmap.h:1,

 from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/painting/qbrush.h:53,

 from ..\..\Qt\2010.05\qt\include/QtGui/qbrush.h:1,

 from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/kernel/qpalette.h:47,

 from ..\..\Qt\2010.05\qt\include/QtGui/qpalette.h:1,

 from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/kernel/qwidget.h:49,

 from ..\..\Qt\2010.05\qt\include/QtGui/qwidget.h:1,

 from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/dialogs/qdialog.h:45,

 from ..\..\Qt\2010.05\qt\include/QtGui/qdialog.h:1,

 from ..\..\Qt\2010.05\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:45,

 from ..\..\Qt\2010.05\qt\include\QtGui/qmessagebox.h:1,

 from ..\..\Qt\2010.05\qt\include\QtGui/QMessageBox:1,

 from ./mainwindow.h:8,

 from plot_fat.cpp:28:

..\..\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qshareddata.h:165: error: expected identifier before '(' token
и этих ошибок 233 штуки.
как быть и что делать?


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 22, 2012, 14:12
обратить внимание на указанные строки


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 22, 2012, 14:44
обратил внимание, они берутся из стандартных библиотек QT, mainwindow.h это файл из отдельного приложения файлы, которого я включил в библиотеку, которую я создаю, приложение то работает отлично(


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 22, 2012, 14:45
 from ./mainwindow.h:8,

 from plot_fat.cpp:28:

ити строки не из стандартных библиотек


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 22, 2012, 15:15
в этих строках написанно
28-ая строка : #include "mainwindow.h"
7-ая строка #include <qmainwindow.h>


Название: Re: Создаю библиотеку формата *.а
Отправлено: V1KT0P от Март 22, 2012, 15:19
в этих строках написанно
28-ая строка : #include "mainwindow.h"
7-ая строка #include <qmainwindow.h>
Выложи минимальный проект с ошибкой, скорее всего где-то толи скобку не поставил, толи точку с запятой...


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 22, 2012, 15:30
да всё что есть я выложил в первом посте  :(


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 22, 2012, 15:35
да всё что есть я выложил в первом посте  :(

Если взять это "все, что есть", то оно не скомпилируется ни у кого

К тому же, как соотносятся между собой функции
int   plot_fat ( int spec_qty, SPEC_DATA *s, CURVE *c )
и
void MainWindow::plot_fat();
?


Что за функция n= plot_first("передаются какие то параметры вычисления") и где она описана?


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 22, 2012, 15:47
отвечаю: была задача написать приложение которое рисует графики, а потом включить это приложение в библиотеку.

При написание программы для рисования графиков старался максимально приблизиться к структуре библиотеки, для того чтобы подключая приложение в библиотеку убирать переобъявление функции(в данном случаи plot_fat() ).

plot_first описанна в моем графическом приложении :
Код:
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=1;
        if(ui->Log10Y->isChecked ()) AxisYmin=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;
}


компилятор ругается в тот момент когда я в файле plot_fat(), пытаюсь include <mainwindow.h> и пошло поехало по всем инклудам... на сами функции не ругается...


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 22, 2012, 15:51
plot_fat.cpp:
Код:
#include <mainwindow.h> // здесь объявленна plot_first 
int   plot_fat ( int spec_qty, SPEC_DATA *s, CURVE *c )
{
 вычисления...
n= plot_first("передаются какие то параметры вычисления")

}

plot_fat не является членом MainWindow. почему она вызвает plot_first без объекта класса MainWindow?

Выложи проект, который можно скачать и попробовать скомпилировать


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 08:27
Выкладывать очень много придетья, чтобы облегчить отладку сделал вот так

создал программу, поместив в неё функцию plot_fat() из основной программы, а свою программу grathQWT собираю как статическую библиотеку.

Код:
#include <QtCore/QCoreApplication>
#include <math.h>
#include <mainwindow.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    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 = MainWindow::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);
//    }

    return a.exec();
}

grathQWT:
Код:
#include "mainwindow.h"
#include "dialog.h"
#include <ui_qwtplot.h>
#include <ui_dialog.h>

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 ();

}

MainWindow::~MainWindow()
{
    delete ui;
}

//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);
//    }

//}
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=1;
        if(ui->Log10Y->isChecked ()) AxisYmin=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;
}

void MainWindow::showData (double *x, double *y, const int N, int numberCurve)
{
    if(numberCurve == 1)
    {
        curv1->setSamples (x,y,N);
        curv1->attach (ui->myPlot);
    }else{
    curv2->setSamples (x,y,N);
    curv2->attach (ui->myPlot);
    }
}

void MainWindow::on_Log10Y_toggled()
{
    if(ui->Log10Y->isChecked ())
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft,new QwtLog10ScaleEngine);
        //plot_fat();
    }else
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft,new QwtLinearScaleEngine);
       // plot_fat();
    }
}

void MainWindow::on_Log10X_toggled()
{
    if(ui->Log10X->isChecked ())
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom,new QwtLog10ScaleEngine);
        //plot_fat();
    }else
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom,new QwtLinearScaleEngine);
        //plot_fat();
    }
}
та старая ошибка пропала

появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object


Название: Re: Создаю библиотеку формата *.а
Отправлено: lighting от Март 23, 2012, 09:11
появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object
Собственно о чем тебе mutineer и говорил в предыдущем сообщении


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 09:41


Цитировать
появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object
Собственно о чем тебе mutineer и говорил в предыдущем сообщении

Хорошо, но как бороться с этой ошибкой ?


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 23, 2012, 11:31


Цитировать
появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object
Собственно о чем тебе mutineer и говорил в предыдущем сообщении

Хорошо, но как бороться с этой ошибкой ?

Способ борьбы с этой ошибкой очень стар и очевиден - идти учить C++


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 13:22
Спасибо, за тапок в рыло!


Название: Re: Создаю библиотеку формата *.а
Отправлено: Пантер от Март 23, 2012, 13:24
Спасибо, за тапок в рыло!
Это была очень даже мягкая рекомендация.


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 23, 2012, 13:25
ну а что еще можно ответить на попытку вызова нестатической функции в виде MainWindow::plot_first(...); извне этого класса?


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 13:36
показали новичку что вы опытнее. а сказать как вызвать(сделать) функцию правильно это уже , извените, наверно не в вашей компетентности. Извените что вообще потревожил вас!


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 23, 2012, 13:38
показали новичку что вы опытнее. а сказать как вызвать(сделать) функцию правильно это уже , извените, наверно не в вашей компетентности. Извените что вообще потревожил вас!

Знать, как вызывать функцию - обязанность новичка, и писать код без этого знания имхо пустая трата времени.
А чтобы узнать как это сделать правильно достаточно прочитать любую книгу по плюсам


Название: Re: Создаю библиотеку формата *.а
Отправлено: Bepec от Март 23, 2012, 14:07
Приходи ещё, ещё накидаем :)


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 14:07
 MainWindow window(NULL);


n = window.fplot_first();

так надо вызывать? в таком виде компилируется собирается но при запуске ничего не происходит :( а при отладке так вообщ вылетает ошибка during startup program exited code 0x0000135


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 23, 2012, 14:10
MainWindow window(NULL);


n = window.fplot_first();

так надо вызывать? в таком виде компилируется собирается но при запуске ничего не происходит :( а при отладке так вообщ вылетает ошибка during startup program exited code 0x0000135

А что должно было произойти? в main у тебя сплошные рассчеты, и вывод результатов в невидимое окно. window.show() покажет окно на экран


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 23, 2012, 14:45
не могу выложить программу размер говорит большой(

а вот что пишит QT
Запускается C:\media\plot_fat\debug\plot_fat.exe...
C:\media\plot_fat\debug\plot_fat.exe завершился с кодом -1073741515


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 29, 2012, 13:55
с выше изложенными проблемами разобрался... теперь эту библиотеку подключаю, к проекту...

вылезли вот такие ошибки:
Код:
../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `MainWindow':

C:\MyProjects\grathQWT/../../Qt/2010.05/qt/include/QtCore/../../src/corelib/arch/qatomic_i386.h:125: multiple definition of `MainWindow::MainWindow(QWidget*)'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:59: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `MainWindow':

C:\MyProjects\grathQWT/mainwindow.cpp:6: multiple definition of `MainWindow::MainWindow(QWidget*)'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:59: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `~MainWindow':

C:\MyProjects\grathQWT/mainwindow.cpp:53: multiple definition of `MainWindow::~MainWindow()'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:71: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o):C:\MyProjects\grathQWT/mainwindow.cpp:56: multiple definition of `non-virtual thunk to MainWindow::~MainWindow()'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:74: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `~MainWindow':

C:\MyProjects\grathQWT/mainwindow.cpp:53: multiple definition of `MainWindow::~MainWindow()'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:71: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o):C:\MyProjects\grathQWT/mainwindow.cpp:56: multiple definition of `non-virtual thunk to MainWindow::~MainWindow()'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:74: first defined here

../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `~MainWindow':

C:\MyProjects\grathQWT/mainwindow.cpp:53: multiple definition of `MainWindow::~MainWindow()'

debug/mainwindow.o:C:\MyProjects\fatigue/mainwindow.cpp:71: first defined here

collect2: ld returned 1 exit status
что интересно: когда библиотеку подключил более простому проекту
Код:
#include <QtGui/QApplication>
#include "dialog.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //Dialog w;
    //w.show();
    MainWindow Window;


        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 = Window.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);
   //     }
   Window.show ();


    return a.exec();
}
то всё работает, есть мысль:
 что приложение к которому идёт подключение библиотеки, основой является класс QMainWindow
Код:
class MainWindow : public QMainWindow

и моё библиотечное приложение идёт как
Код:
class MainWindow : public QMainWindow
{
    Q_OBJECT

и из-за этого множественное объявление, может быть такое или нет?


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 29, 2012, 13:57
У тебя два раза объявляется класс MainWindow. Как ты думаешь, если класс объявлен два раза, может ли это быть причиной множественного объявления? Вот просто с точки зрения русского языка


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 29, 2012, 14:02
Цитировать
тебя два раза объявляется класс MainWindow. Как ты думаешь, если класс объявлен два раза, может ли это быть причиной множественного объявления? Вот просто с точки зрения русского языка

ну значит можно решить проблему переименовав class в одном из приложений, правильная мысль?


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Март 29, 2012, 14:07
именно


Название: Re: Создаю библиотеку формата *.а
Отправлено: popper от Март 29, 2012, 20:27
для самообразования можно ознакомиться с исходниками библиотеки qwt (благо она под рукой) и попытаться там отыскать наследника от QMainWindow. Если есть желание перенести часть функционала в библиотеку, то нужно хотя бы представлять, что это такое


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Март 30, 2012, 12:41
подскажите пожалуйста, что означает эта строчка  x = NEWM ( n, double )?


Название: Re: Создаю библиотеку формата *.а
Отправлено: kambala от Март 30, 2012, 14:35
подозреваю, что этот макрос создаёт динамический массив типа double размера n, но тебе нужно просто найти его в коде (нажать ф2 на него в креаторе)


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 13:40
подозреваю, что этот макрос создаёт динамический массив типа double размера n, но тебе нужно просто найти его в коде (нажать ф2 на него в креаторе)

Спасибо за ответ. разобрался.

Возник вопрос:
из приложения вызываю функцию в этой вункции я пишу:

MainWindow Window;
Window.plot_first();
Window.show ();

когда я запускаю весь процесс то вот когда доходит до plot_first() - появляется окошко в котором должно происходить рисование и сразу исчезает. Почему оно исчезает?


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Апрель 04, 2012, 13:41
Потому что Window локальная переменная и уничтожается при выходе из функции


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 14:10
Потому что Window локальная переменная и уничтожается при выходе из функции

Блин так и думал, будь любезен подскажи тогда как решить эту задачу? руки опускаются(


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Апрель 04, 2012, 14:12
Потому что Window локальная переменная и уничтожается при выходе из функции

Блин так и думал, будь любезен подскажи тогда как решить эту задачу? руки опускаются(

Не делать Window локальной переменной. А если так и думал, то мог и сам решить, а не на форум идти


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 14:17
То есть надо сделать её глобальной?

то есть объявить её вне функции?


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 14:57
ну хоть носом ткните куда читать... и что именно читать!


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Апрель 04, 2012, 14:58
блин, за эти 40 минут мог бы уже попробовать свои предположения воплотить в коде и посмотреть!


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 15:11
за эти 40 минут пытался найти ответ в книжке Джесс Либерти - Освой самостоятельно С++ за 21 день,

и единственная мысля это сделать так, что пока не нажмётся кнопка close в приложении, которое запускается то не закрывать окно, но как реализовать это - я не знаю(


Название: Re: Создаю библиотеку формата *.а
Отправлено: Пантер от Апрель 04, 2012, 15:16
за эти 40 минут пытался найти ответ в книжке Джесс Либерти - Освой самостоятельно С++ за 21 день,

и единственная мысля это сделать так, что пока не нажмётся кнопка close в приложении, которое запускается то не закрывать окно, но как реализовать это - я не знаю(
Освой самостоятельно нейрохирургию за 21 день...


Название: Re: Создаю библиотеку формата *.а
Отправлено: mutineer от Апрель 04, 2012, 15:17
Ошибка у тебя - создаешь окно локальной переменной в функции. Что именно ты хочешь сделать я не знаю. Объясни задачу

Пантер угу http://comicsia.ru/i/4a/f4-19188.png


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 04, 2012, 15:31
моя задача :
основное приложение через которое загружается базаданных, и функция по обработке данных;
эта функция описанна в бибилиотеке, когда функция заканчивает обработку базы данных, вызывает функцию отрисовки данных которые обработала( рисует графики);
функцию отрисовывающая графики, описанна в моем приложении, которое я собрал как еще одну библиотеку.

в идеале выгледет так загружаем базу данных -> получаем графики неких функций.

а получается загружаю базу данных всё пролетает мгновенно и ничего не понятно.

как вы сказали я объявляю локально, как мне реализовать всё это?


Название: Re: Создаю библиотеку формата *.а
Отправлено: tiiL от Апрель 06, 2012, 09:18
Разобрался со своими ошибками.

объявив в функции свой класс : MainWindow *Window = new MainWindow;

но теперь моё окно с графикой открывается на заднем фоне, существует ли какиенить флаги, чтобы окно было поверх окон, ну или чтонить типо тогО?