Russian Qt Forum
Ноябрь 24, 2024, 05:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как нарисовать линию со стрелкой используя QGraphicsLineItem ?  (Прочитано 9951 раз)
AntonUfo
Гость
« : Февраль 06, 2009, 12:26 »

Собственно вопрос, в том что с тем как рисовать просто линию я вроде бы как понял, а как нарисовать линию со стрелкой или с квадратиком на конце (в середине), может быть у кого нибудь есть примерчик ? (линию рисую наследуя QGraphicsLineItem)

Спасибо !

PS: пример Diagramscene смотрел, только разобраться как в нем линия со стрелкой не смог Грустный

2PS: Предполагаю что нужно делать с помощью переопределения метода QGraphicsItem:

virtual void paint (QPainter* painter, const QStyleOptionGraphicsItem *option, QWidget * widget = 0 );

только как ?
« Последнее редактирование: Февраль 06, 2009, 14:58 от AntonUfo » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Февраль 06, 2009, 17:09 »

см. пример $(QTDIR)\examples\graphicsview\diagramscene
Записан

Юра.
AntonUfo
Гость
« Ответ #2 : Февраль 07, 2009, 17:12 »

Да, я смотрел ии этот пример то же, только у меня такая проблема, после того как я определил:
Код:

void Link::paint(QPainter *painter,
                 const QStyleOptionGraphicsItem *option,
                 QWidget * /* widget */)
{

    if (myFromNode->collidesWithItem(myToNode))
        return;

    arrowHead.clear();
    painter->setRenderHint(QPainter::Antialiasing, true);


    double angle = ::acos(line().dx() / line().length());

    if (line().dy() >= 0)
        angle = (Pi * 2) - angle;

        QPointF arrowP1 = line().p1() + QPointF(sin(angle + Pi / 3) * arrowSize,
                                        cos(angle + Pi / 3) * arrowSize);
        QPointF arrowP2 = line().p1() + QPointF(sin(angle + Pi - Pi / 3) * arrowSize,
                                        cos(angle + Pi - Pi / 3) * arrowSize);


        arrowHead << line().p1() << arrowP1 << arrowP2;

        //painter->drawLine(line());
        painter->drawPolygon(arrowHead);


у меня стрелка рисуется, вот только после того как я ее по экрану двигать начинаю на сцене появляются артефакты, см. вложение..

Как от них избавится ?

И еще обьясните для чего и как используется функция
Код:
QRectF MyClass::boundingRect() const
{


}

Записан
BaltikS
Гость
« Ответ #3 : Февраль 07, 2009, 19:20 »

QRectF MyClass::boundingRect() const - это размер прямоугольной области, который отрисовывает сцена у итема. Если её не задавать, то отрисовка происходить не будет. Артефакты как раз таки и связаны с тем, что неправильно определена скорее всего данная область
Записан
AntonUfo
Гость
« Ответ #4 : Февраль 10, 2009, 23:52 »

И еще вопрос, почему то если вот эту функцию:
Код:
Node *Window::selectedNode() const
{
    QList<QGraphicsItem *> items = scene->selectedItems();
    if (items.count() == 1) {
        return dynamic_cast<Node *>(items.first());
    } else {
        return 0;
    }
}
использовать без const, при выборе узла на сцене выскакивает ошибка, что значит параметр const ?
PS: в общих чертах понятно что эта функция делает, пытаюсь понять пример из книги, а в ней объяснения никакого по этому поводу...  Грустный
Записан
BRE
Гость
« Ответ #5 : Февраль 11, 2009, 00:32 »

PS: в общих чертах понятно что эта функция делает, пытаюсь понять пример из книги, а в ней объяснения никакого по этому поводу...  Грустный
Ты это найдешь в книге по C++, ее желательно прочитать перед изучением Qt.  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.161 секунд. Запросов: 23.