Сначала о струтуре всего что делаю:
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 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];
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)
{
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