首页| 论坛| 消息

标题:求助关于QGraphicsItem的坐标问题
作者:阿拉克尼
日期:2016-06-26 20:26
内容:

想保存QGraphicsScene里的item,我用了items();函数,但是这个函数应该保存不了坐标,有哪位做过这方面的功能,应该怎么获取这些item的坐标呢?谢谢了!


#1 [kimtaikee 06-26 21:56]
有个scenePos()函数
#2 [阿拉克尼 06-26 23:40]
嗯,我用了这个函数
foreach (QGraphicsItem *my, list){scene->addItem(my);my->setPos(my->scenePos());}
这个foreach是保存完QGraphicsscene里所有的item,然后恢复item位置的一个语句,my遍历了QGraphicsscene里所有的item,my->setPos(my->scenePos());这句感觉有点问题,实际也是执行的时候没有结果,提示my->scenePos()没有有效值。不知道哪里出了问题。
#3 回 阿拉克尼 的帖子 [kimtaikee 06-27 13:17]
阿拉克尼:嗯,我用了这个函数
foreach (QGraphicsItem *my, list)    {        scene->addItem(my);        my->setPos(my->scenePos());     &n .. (2016-06-26 23:40) 
这个scenePos是你在把这个item加入到scene时设置的,如果你没有设置的话那就是(0,0), 那你再试试item->sceneBoundingRect().topLeft()这个能获得左上角的坐标位置。
#4 回 kimtaikee 的帖子 [阿拉克尼 06-27 20:58]
kimtaikee:这个scenePos是你在把这个item加入到scene时设置的,如果你没有设置的话那就是(0,0), 那你再试试item->sceneBoundingRect().topLeft()这个能获得左上角的坐标位置。 (2016-06-27 13:17) 
嗯,说下我的思路吧,有两个按钮,一个保存按钮,一个恢复按钮。
先拖item到QGraphicsscene里边,然后点击保存按钮,我用的是
QList list;
void MainWindow::save()
{
list = scene ->items();
}
这个items()函数来实现保存所有item的功能的,然后点击恢复按钮,
void MainWindow::restore()
{
foreach (QGraphicsItem *my, list)
{
scene->addItem(my);
my->setPos(my->scenePos());
}
我换成my->setPos(my->sceneBoundingRect().topLeft());是可以定位到左上角的位置的,现在没有头绪,麻烦大哥看下问题出在哪,为我指点下迷津,谢谢!
#5 [kimtaikee 06-27 21:19]
你添加每个item到scene中都是需要调用setPos设置它的位置的,这时候scenePos返回的是正确的结果。如果你没有调用setPos的话返回的都是(0,0),我上一个回复中提到的左上角是item在scene中的左上角不是整个scene的左上角。你先把创建这些item的代码贴上来。

<< 1 2 >> (1/2)

回复 发表
主题 版块