crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> "правильное" выделение графика функции
_Vitaliy_
  опции профиля:
сообщение 3.2.2012, 12:17
Сообщение #1


Студент
*

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

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




Репутация:   0  


Доброго времени суток.
На сцену нужно вывести порядка двадцати графиков функций, каждый график представляет собой "достаточно ломанную кривую" которые могут пересекаться друг с другом, есть необходимость перемещать графики по сцене, как организовать правильное выделение каждого графика?
QRectF Grafik::boundingRect() const
{
    return QRectF(0, 0, my_model->rowCount()+10, size_y);
}


QPainterPath Grafik::shape() const
{
    QPainterPath path;
    path.addRect(1, 1, size_x, size_y);
    return path;
}


сама отрисовка:
void Grafik::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(widget);

    QColor fillColor = (option->state & QStyle::State_Selected) ? color.dark(150) : color;
    if (option->state & QStyle::State_MouseOver)
        fillColor = fillColor.light(125);

    const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());

    QVarLengthArray<QPointF> pointsss;
    QList<double> x;

    for (int i = 0; i <= size_x-1; i++)
    {
        x.append(my_model->item(i, stolbec)->text().toFloat());
        pointsss.append(QPointF(i,x[i]));
    }


вывод на сцену производится следующим образом:
QGraphicsItem *item = new Grafik(model, Qt::red, 3, min, max);
        item->setPos(QPointF(0, 200));
        item->setFlag(QGraphicsItem::ItemIsMovable, true);

все это происходит в цикле.

QPainterPath Grafik::shape() будет выделять прямоугольник, который может накладываться друг на друга и правильного выделения не происходит.
Как это победить? Т.е. необходимо, чтобы при наведении на сам график +- например 3 пикселя происходило выделение.

на мой взгляд несколько вариантов:
1. правильно задать shape()
2. переопределить mousePressEvent
3. использование QPainterPath::LineTo и задать толщину например если линия у меня рисуется в 2 пикселя, то для PainterPath задать например в 5-7 пикселей.

В каком направлении двигаться?



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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