crossplatform.ru

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

История благодарностей участнику KontAr ::: Спасибо сказали: 4 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
15.12.2011, 14:36 Полилиния
Цитата(KontAr @ 14.12.2011, 21:55) *
Последняя секция в полилинии выделяется только от точки, примыкающей к предыдущей секции, т.е. вобще не выделяется. Что не так?

boundingrect был не так...
Vova,
14.12.2011, 20:55 Полилиния
Последняя секция в полилинии выделяется только от точки, примыкающей к предыдущей секции, т.е. вобще не выделяется. Что не так?
QPainterPath shape() const
    {
        QPainterPath painterPath;

        painterPath.moveTo(points[0].x(), points[0].y());
        for(int i = 1; i < points.count(); i++)
        {
            painterPath.lineTo(points[i].x(), points[i].y());
        }

        //qDebug()<<painterPath;
        QPainterPathStroker ps;
        ps.setCapStyle(Qt::RoundCap);
        ps.setJoinStyle(Qt::RoundJoin);
        ps.setWidth(2);
        return ps.createStroke(painterPath);
    }
Vova,
13.12.2011, 17:49 Полилиния
Я был очень близко к решению, но прошел мимо... Спасибо, помогло
Vova,
12.12.2011, 17:47 Полилиния
Всем привет. Вопрос вот в чем, есть у меня полилиния, наследник от QGraphicsItem. В ее основе вектор точек. Линию за узлы тянут маркеры (тоже наследники QGraphicsItem). а прежде, чем тянуть, нужно выделить. Вот тут проблема: толщина линии 3, RoundCap и RoundJoin. Как сделать так, чтобы щелчки ловились точно на линии? Функция shape? у меня сейчас так:
Раскрывающийся текст

    QPainterPath shapeLine(QPointF p1, QPointF p2) const
    {
        QPolygonF     pol,  pol2;
        QPainterPath path, path2;
        float delta = 2; //дополнительная область вокруг линии

        pol << QPointF(p1 + QPointF(-delta, -delta)) //1p1
            << QPointF(p2 + QPointF(-delta, -delta)) //1p2
            << QPointF(p2 + QPointF( delta,  delta)) //3p2
            << QPointF(p1 + QPointF( delta,  delta));//3p1

        pol2<< QPointF(p1 + QPointF( delta, -delta)) //4p1
            << QPointF(p2 + QPointF( delta, -delta)) //4p2
            << QPointF(p2 + QPointF(-delta,  delta)) //2p2
            << QPointF(p1 + QPointF(-delta,  delta));//2p1

        //path.setFillRule(Qt::WindingFill);
        path.addPolygon(pol);
        path2.addPolygon(pol2);
        return path.united(path2);
    }

    QPainterPath shape() const
    {
        QPainterPath painterPath;

        for(int i = 0; i < points.count() - 1; i++)
        {
            painterPath.addPath(shapeLine(points[i], points[i + 1]));
        }

        return painterPath;
    }



Получается не гут, области на которых выделяется, сильно зависят от угла секции полилинии, а последняя секция вобще ловит щелчки. Что делать не знаю :unknw:
Vova,

RSS Текстовая версия Сейчас: 26.11.2024, 11:43