Всем привет!
Можно ли в qwt выделить часть графика? С отрисовкой выделения, как в аудио редакторах. Заранее спасибо
PlotWidget::PlotWidget(QWidget *parent, Plot2_D *aPlot) : QWidget(parent)
{
setAttribute(Qt::WA_DeleteOnClose);
d_aPlot = aPlot
d_pPlot = new Plot2_D(1,this);
d_pPlot->setMargin(5);
setContextMenuPolicy(Qt::NoContextMenu);
d_aPanner = new QwtPlotPanner(d_aPlot->canvas());
d_aPanner->setMouseButton(Qt::MidButton);
d_pPicker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft, QwtPicker::RectSelection | QwtPicker::DragSelection, QwtPlotPicker::RectRubberBand, QwtPicker::AlwaysOn, d_pPlot->canvas());
d_pPicker->setRubberBandPen(QColor(Qt::red));
d_pPicker->setTrackerPen(QColor(Qt::yellow));
d_aPicker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft, QwtPicker::PointSelection | QwtPicker::DragSelection, QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn, d_aPlot->canvas());
d_aPicker->setRubberBandPen(QColor(Qt::red));
d_aPicker->setTrackerPen(QColor(Qt::yellow));
QGridLayout *gl = new QGridLayout(this);
gl->addWidget(d_pPlot);
gl->setContentsMargins(0, 0, 0, 0);
d_aPlot->setAxisScale(QwtPlot::xBottom, 0, 360);
d_pPlot->setAxisScale(QwtPlot::xBottom, 0, 360);
connect(d_pPicker, SIGNAL(selected(const QwtDoubleRect &)), SLOT(on_selected(const QwtDoubleRect &)));
}
void PlotWidget::on_selected(const QwtDoubleRect &rect)
{
double maxX, minX, maxY, minY;
if(rect.left() < rect.right())
{
minX = rect.left();
maxX = rect.right();
}
else
{
minX = rect.right();
maxX = rect.left();
}
if(rect.top() < rect.bottom())
{
minY = rect.top();
maxY = rect.bottom();
}
else
{
minY = rect.bottom();
maxX = rect.top();
}
if(minY != maxY && minX != maxX )
{
d_aPlot->setAxisScale(QwtPlot::xBottom, minX, maxX);
d_aPlot->setAxisScale(QwtPlot::yLeft, minY, maxY);
d_aPlot->minX = minX-d_aPlot->minAxisX;
d_aPlot->maxX = maxX-d_aPlot->minAxisX;
d_aPlot->minY = minY;
d_aPlot->maxY = maxY;
m_flagSelect = true;
d_pPlot->paintRectengle(d_aPlot->minAxisX+d_aPlot->minX,d_aPlot->minAxisX+d_aPlot->maxX,d_aPlot->minY,d_aPlot->maxY);
}
d_aPlot->replot();
}