crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Полилиния, Правильное выделении полилинии
KontAr
  опции профиля:
сообщение 12.12.2011, 17:47
Сообщение #1


Новичок


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

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




Репутация:   1  


Всем привет. Вопрос вот в чем, есть у меня полилиния, наследник от 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:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 13.12.2011, 13:32
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


используй QPainterPathStroker для задания shape
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KontAr
  опции профиля:
сообщение 13.12.2011, 17:49
Сообщение #3


Новичок


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

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




Репутация:   1  


Я был очень близко к решению, но прошел мимо... Спасибо, помогло
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KontAr
  опции профиля:
сообщение 14.12.2011, 20:55
Сообщение #4


Новичок


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

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




Репутация:   1  


Последняя секция в полилинии выделяется только от точки, примыкающей к предыдущей секции, т.е. вобще не выделяется. Что не так?
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);
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KontAr
  опции профиля:
сообщение 15.12.2011, 14:36
Сообщение #5


Новичок


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

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




Репутация:   1  


Цитата(KontAr @ 14.12.2011, 21:55) *
Последняя секция в полилинии выделяется только от точки, примыкающей к предыдущей секции, т.е. вобще не выделяется. Что не так?

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

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


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




RSS Текстовая версия Сейчас: 30.11.2024, 5:23