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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с рисованием линии  (Прочитано 3982 раз)
MuLLIKA
Гость
« : Февраль 09, 2011, 01:05 »

Доброго времени суток! проблема, мне нужно к полигону от другого полигона нарисовать 3 линии, так получаеться, что 1-я линия рисуеться нормально, 2-я линия так же рисуеться но 1-й уже нет на сцене, тоже самое и с 3-й линией, 2-я пропадает.

Thanks!
Записан
slim
Гость
« Ответ #1 : Февраль 09, 2011, 01:19 »

попробуй эти линий нарисовать на одно апдейте..
Записан
MuLLIKA
Гость
« Ответ #2 : Февраль 09, 2011, 01:39 »

всмысле написать функцию апдейта одну общую, и для каждой новой создаваемой линии вызывать именно ее?
Записан
slim
Гость
« Ответ #3 : Февраль 09, 2011, 01:47 »

каждая линия свой отдельный объект, иначе не как
можешь кинуть чуток кода...
Записан
MuLLIKA
Гость
« Ответ #4 : Февраль 09, 2011, 02:02 »

ПРи добавлении новой линии на сцену делаю так апдейт:
Код:
void graphitemclass::addMyLine(lineclass *lclass)
{
    MyPaintLine.append(lclass);
    for(int i = 0; i < MyPaintLine.count(); i++)
    {
        MyPaintLine.at(i)->updatePosition();
    }
}
не получаеться....
Записан
slim
Гость
« Ответ #5 : Февраль 09, 2011, 02:16 »

я имел ввиду:
void lineclass::paint(QPainter * painter)
{
...
  painter->drawLine(..);
}

это как самый просто вариант

а что в updatePosition ?

как вариант можешь использовать QPainterPath
Записан
MuLLIKA
Гость
« Ответ #6 : Февраль 09, 2011, 02:22 »

Код:
void lineclass::updatePosition()
{
    QLineF line(mapFromItem(_beginItem, 0, 0), mapFromItem(_endItem, 0, 0));
    setLine(line);
}

Код:
void lineclass::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    if(_beginItem->collidesWithItem(_endItem))
        return;
    QLineF BegToEndItemLine(_beginItem->scenePos(), _endItem->scenePos());
    QRectF pp = _endItem->sceneBoundingRect();
    QPolygonF _endPolygon = _endItem->polygon();
    QPointF p1 = _endPolygon.first() + _endItem->pos();
    QPointF p2, _point;
    QLineF polyLine;
    int i;
    for(i = 1; i < _endPolygon.count(); ++i)
    {
        p2 = _endPolygon.at(i) + _endItem->pos();
        polyLine = QLineF(p1, p2);
        QLineF::IntersectType intersT = polyLine.intersect(BegToEndItemLine, &_point);
        if(intersT == QLineF::BoundedIntersection)
            break;
        p1 = p2;
    }
this->setLine(QLineF(pervPolygon, vtorPolygon));
        if(K7Line != NULL) painter->setPen(QPen(Qt::black, 4, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin));
        if(p296Line != NULL) painter->setPen(QPen(Qt::black, 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        if(p2Line != NULL) painter->setPen(QPen(Qt::black, 4, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin));
        if(p268Line != NULL) painter->setPen(QPen(Qt::black, 4, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin));
        if(p269Line != NULL) painter->setPen(QPen(Qt::black, 4, Qt::DashDotDotLine, Qt::RoundCap, Qt::RoundJoin));
        if(p274Line != NULL) painter->setPen(QPen(Qt::green, 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        if(shLine != NULL) painter->setPen(QPen(Qt::gray, 4, Qt::SolidLine, Qt::FlatCap, Qt::RoundJoin));
        painter->setRenderHint(QPainter::Antialiasing, true);
        painter->setBrush(Qt::black);
        painter->drawLine(line());
        painter->drawPolygon(linePolygon);
        if (isSelected()) {
            painter->setPen(QPen(Qt::black, 1, Qt::DashLine));
            QLineF myLine = line();
            myLine.translate(0, 4.0);
            painter->drawLine(myLine);
            myLine.translate(0,-8.0);
            painter->drawLine(myLine);
          }
}
Записан
slim
Гость
« Ответ #7 : Февраль 09, 2011, 02:34 »

смотри,  а если попробовать по простому, без всяких там манипуляций
void lineclass::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
        painter->setBrush(Qt::black);
        painter->drawLine(line());
}

проблема будет или нет?
Записан
MuLLIKA
Гость
« Ответ #8 : Февраль 09, 2011, 02:49 »

нет, не добавляеться и не перерисовываеться...
Записан
slim
Гость
« Ответ #9 : Февраль 09, 2011, 02:53 »

похоже на танцы с бубном) кидай сырцы
Записан
MuLLIKA
Гость
« Ответ #10 : Февраль 10, 2011, 02:18 »

Кода очень много( за основу я брал пример \qt\examples\graphicsview\diagramscene
Грубо говоря, мне нужно сделать так что бы две фигуры могли соединятся друг с другом по 2 или более линиям.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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