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

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

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ НАХОЖДЕНИЕ КООРДИНАТ ЭЛЕМЕНТА

Автор: Trisch 30.1.2012, 12:58

мне надо получить все координаты элементов, которые находятся на сцене

Я думал сделать так:

//---
    double q;
    QList<QGraphicsItem*> items = graphicsView->scene()->items();

    QList<QGraphicsItem*>::iterator it = items.begin();
    for(; it != items.end(); ++it)
    {
        pItem = *it;
        q = pItem->x();
        std::cout << q;
    }
//---


но у меня в итоге отображаются одни нули. Что я делаю не так? или как это можно сделать по другому?


Автор: wiz29 30.1.2012, 13:16

QPointF QGraphicsItem::scenePos () const тебе в помощь

Автор: Trisch 30.1.2012, 13:47

Цитата(wiz29 @ 30.1.2012, 13:16) *
QPointF QGraphicsItem::scenePos () const тебе в помощь


То-есть так?
q = pItem->scenePos().x();

тот же результат(

Автор: wiz29 30.1.2012, 14:18

Цитата(Trisch @ 30.1.2012, 14:47) *
тот же результат(


А элементы каким образом размещаются?

Автор: Trisch 30.1.2012, 23:49

Цитата(wiz29 @ 30.1.2012, 15:18) *
Цитата(Trisch @ 30.1.2012, 14:47) *
тот же результат(


А элементы каким образом размещаются?


вот фрагмент кода размещения элементов:
    for(int i = 0; i < node; i++)
    {
        QGraphicsEllipseItem *pEllipseItem =
                pScene->addEllipse(QRectF( (oX + r*cos(i*z+M_PI/2)) , (oY + r*sin(i*z+M_PI/2)) ,r_m ,r_m),
                                   QPen(Qt::red), QBrush(Qt::red));
        pEllipseItem->setFlags(QGraphicsItem::ItemIsMovable);
    }

Автор: wiz29 31.1.2012, 7:24

QGraphicsEllipseItem * QGraphicsScene::addEllipse ( const QRectF & rect, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

вот что написано к этой функции:

Note that the item's geometry is provided in item coordinates, and its position is initialized to (0, 0).

Делай выводы.

Автор: Trisch 1.2.2012, 3:01

Цитата(wiz29 @ 31.1.2012, 8:24) *
QGraphicsEllipseItem * QGraphicsScene::addEllipse ( const QRectF & rect, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

вот что написано к этой функции:

Note that the item's geometry is provided in item coordinates, and its position is initialized to (0, 0).

Делай выводы.


Думаю надо как-то преобразовать координаты. А вот как это сделать, ума не приложу(((((

Автор: wiz29 1.2.2012, 8:08

Цитата(Trisch @ 1.2.2012, 4:01) *
Думаю надо как-то преобразовать координаты. А вот как это сделать, ума не приложу(((((


Координаты преобразовывать не нужно, если ты используешь scenePos. Просто по умолчанию все размещенные тобой элементы имеют позицию QPointF(0.0, 0.0), поэтому и получаются нули при считывании. Если же задать, после создания каждого элемента, его позицию отличной от QPointF(0.0, 0.0), тогда получится результат отличный от нулей )

Автор: Trisch 5.2.2012, 18:53

Цитата(wiz29 @ 1.2.2012, 9:08) *
Цитата(Trisch @ 1.2.2012, 4:01) *
Думаю надо как-то преобразовать координаты. А вот как это сделать, ума не приложу(((((


Координаты преобразовывать не нужно, если ты используешь scenePos. Просто по умолчанию все размещенные тобой элементы имеют позицию QPointF(0.0, 0.0), поэтому и получаются нули при считывании. Если же задать, после создания каждого элемента, его позицию отличной от QPointF(0.0, 0.0), тогда получится результат отличный от нулей )


Я сделал так:
 for(int i = 0; i < node; i++)
    {
        QGraphicsEllipseItem *pEllipseItem =
                pScene->addEllipse( 0, 0 ,r_m ,r_m,
                                   QPen(Qt::red), QBrush(Qt::red));
        pEllipseItem->setX(oX + c*r*cos(i*z+M_PI/2));
        pEllipseItem->setY(oY + c*r*sin(i*z+M_PI/2));
        pEllipseItem->setFlags(QGraphicsItem::ItemIsMovable);
    }


все работает))) Спасибо)




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