Автор: 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);
}
все работает))) Спасибо)