crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Qwt выделение части графика
VolnovodT00
  опции профиля:
сообщение 9.3.2013, 21:13
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 9.3.2013
Пользователь №: 3741

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




Репутация:   0  


Всем привет!
Можно ли в qwt выделить часть графика? С отрисовкой выделения, как в аудио редакторах. Заранее спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 11.3.2013, 8:00
Сообщение #2


Студент
*

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

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




Репутация:   0  


Цитата(VolnovodT00 @ 9.3.2013, 21:13) *
Всем привет!
Можно ли в qwt выделить часть графика? С отрисовкой выделения, как в аудио редакторах. Заранее спасибо


В принципе все довольно не сложно. Идея такова :
1. Создаем класс у которого объявляем 2 члена типа QwtPlot (исходный d_aPlot и масштабированный d_pPlot)
2. Объявляем в этом классе поле QwtPlotPicker *d_pPicker;
3. Создаем все объекты в конструкторе (приблизительный вид кода):
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 &)));
}


4. Вид слота on_select:
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();
}


P.S.: Plot2_D - это мой класс, наследник от QwtPlot

Сообщение отредактировал nikita - 11.3.2013, 8:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.3.2013, 10:41
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


я делал по-простому - поверх морды виджета растягиваю мышкой полупрозрачный виджет, затем мапирую на координаты области построения и задаю новые границы осям.


Прикрепленное изображение


От пикера показываю только координаты, а "родная" выделялка больно уж убогой показалась

Сообщение отредактировал Алексей1153 - 11.3.2013, 10:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 17:27