Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ "правильное" выделение графика функции

Автор: _Vitaliy_ 3.2.2012, 12:17

Доброго времени суток.
На сцену нужно вывести порядка двадцати графиков функций, каждый график представляет собой "достаточно ломанную кривую" которые могут пересекаться друг с другом, есть необходимость перемещать графики по сцене, как организовать правильное выделение каждого графика?

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 пикселей.

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




Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)