{
Q_OBJECT
public:
explicit main_window
(QWidget *parent
= 0);
~main_window();
signals:
public slots:
private:
};
main_window
::main_window(QWidget *parent
) :{
for(int n1(0);n1<2;++n1
{
_plots.push_back(new main_plot(_tabs->widget(n1)));
lay->addWidget(main_plots[n1],0,0);
main_plots[n1]->plot_curves();
for(int n2(0);n2<static_cast<int>(main_plots.size());++n2)
{
if(n1!=n2)
{
connect((QObject*)(main_plots
[n1
]->axisWidget
(QwtPlot::xBottom)),
SIGNAL(scaleDivChanged
()),meridional_plots
[n2
],
SLOT(scaleDivChangedSlot
()));
connect((QObject*)(main_plots
[n2
]->axisWidget
(QwtPlot::xBottom)),
SIGNAL(scaleDivChanged
()),meridional_plots
[n1
],
SLOT(scaleDivChangedSlot
()));
}
}
}
setCentralWidget(_tabs);
}
{
Q_OBJECT
public:
main_plot
(QWidget *parent
= nullptr
);
public Q_SLOTS:
void plot_curves();
private:
QVector<QwtPlotCurve*> curves;
QwtPlotRescaler *rescaler;
private Q_SLOTS:
void scaleDivChangedSlot();
};
ain_plot
::main_plot(QWidget *parent
):{
setCanvasColor( Qt::white );
// Avoid jumping when label with 3 digits
// appear/disappear when scrolling especially for y axis
sdy
->setMinimumExtent
( sdy
->extent
( axisWidget
( QwtPlot::yLeft )->font
() ) );
sdx
->setMinimumExtent
( sdx
->extent
( axisWidget
( QwtPlot::xBottom )->font
() ) );
setAxisTitle
(QwtPlot::xBottom,
"z");
plotLayout()->setAlignCanvasToScales( true );
rescaler
= new QwtPlotRescaler
(canvas
(),
QwtPlot::xBottom,QwtPlotRescaler
::Expanding);
rescaler
->setAspectRatio
(QwtPlot::yLeft,
1.0);
rescaler
->setAspectRatio
(QwtPlot::xTop,
0.0);
rescaler
->setAspectRatio
(QwtPlot::yRight,
0.0);
pp->setMouseButton(Qt::MidButton,Qt::NoModifier);
replot();
}
void main_plot::plot_curves()
{
//add some code to plot a simple curve
}
void main_plot::scaleDivChangedSlot()
{
QwtPlot *plt
= qobject_cast<QwtPlot
*>
((sender
())->parent
());
QwtInterval intv
= plt
->axisInterval
(QwtPlot::xBottom);
this
->setAxisScale
(QwtPlot::xBottom, intv.
minValue(), intv.
maxValue());
intv
= plt
->axisInterval
(QwtPlot::yLeft);
this
->setAxisScale
(QwtPlot::yLeft, intv.
minValue(), intv.
maxValue());
this->replot();
}
class main_window : public QMainWindow
{
Q_OBJECT
public:
explicit main_window(QWidget *parent = 0);
~main_window();
signals:
public slots:
private:
QTabWidget *_tabs;
};
main_window::main_window(QWidget *parent) :
QMainWindow(parent)
{
_tabs = new QTabWidget(this);
for(int n1(0);n1<2;++n1
{
_tabs->addTab(new QWidget(), QString::number(n1));
_plots.push_back(new main_plot(_tabs->widget(n1)));
QGridLayout *lay = new QGridLayout(meridional_tabs->widget(n1));
lay->addWidget(main_plots[n1],0,0);
main_plots[n1]->plot_curves();
for(int n2(0);n2<static_cast<int>(main_plots.size());++n2)
{
if(n1!=n2)
{
connect((QObject*)(main_plots[n1]->axisWidget(QwtPlot::xBottom)),SIGNAL(scaleDivChanged()),meridional_plots[n2],SLOT(scaleDivChangedSlot()));
connect((QObject*)(main_plots[n2]->axisWidget(QwtPlot::xBottom)),SIGNAL(scaleDivChanged()),meridional_plots[n1],SLOT(scaleDivChangedSlot()));
}
}
}
setCentralWidget(_tabs);
}
class main_plot : public QwtPlot
{
Q_OBJECT
public:
main_plot(QWidget *parent = nullptr);
public Q_SLOTS:
void plot_curves();
private:
QVector<QwtPlotCurve*> curves;
QwtPlotRescaler *rescaler;
QwtPlotMagnifier *pm;
QwtPlotPanner *pp;
private Q_SLOTS:
void scaleDivChangedSlot();
};
ain_plot::main_plot(QWidget *parent ):
QwtPlot( parent )
{
setCanvasColor( Qt::white );
// Avoid jumping when label with 3 digits
// appear/disappear when scrolling especially for y axis
QwtScaleDraw *sdy = axisScaleDraw( QwtPlot::yLeft );
sdy->setMinimumExtent( sdy->extent( axisWidget( QwtPlot::yLeft )->font() ) );
setAxisTitle(QwtPlot::yLeft, "r");
QwtScaleDraw *sdx = axisScaleDraw( QwtPlot::xBottom );
sdx->setMinimumExtent( sdx->extent( axisWidget( QwtPlot::xBottom )->font() ) );
setAxisTitle(QwtPlot::xBottom, "z");
plotLayout()->setAlignCanvasToScales( true );
rescaler = new QwtPlotRescaler(canvas(),QwtPlot::xBottom,QwtPlotRescaler::Expanding);
rescaler->setAspectRatio(QwtPlot::yLeft,1.0);
rescaler->setAspectRatio(QwtPlot::xTop,0.0);
rescaler->setAspectRatio(QwtPlot::yRight,0.0);
pm = new QwtPlotMagnifier( canvas() );
pp = new QwtPlotPanner(canvas());
pp->setMouseButton(Qt::MidButton,Qt::NoModifier);
replot();
}
void main_plot::plot_curves()
{
//add some code to plot a simple curve
}
void main_plot::scaleDivChangedSlot()
{
QwtPlot *plt = qobject_cast<QwtPlot*>((sender())->parent());
QwtInterval intv = plt->axisInterval (QwtPlot::xBottom);
this->setAxisScale(QwtPlot::xBottom, intv.minValue(), intv.maxValue());
intv = plt->axisInterval (QwtPlot::yLeft);
this->setAxisScale(QwtPlot::yLeft, intv.minValue(), intv.maxValue());
this->replot();
}
To copy to clipboard, switch view to plain text mode
Bookmarks