小弟在做一个连连看游戏,遇到了一个itemScene的问题,求大神们帮帮忙~

狐狸小崽子 2013-08-31 12:43:47
先上张图,也好作参考!

说一下我遇到的问题吧!
如图,我选中第一个图形,出现第一个蓝色方框框住我选中的图形,然后我再去选有路径相通的第二个相同图形,根据正常的逻辑,应该是先显示第二个方框框住第二个选中的图形,然后显示路径,接着图形,路径,还有方框都消失,这就形成一个消图过程!但实际上,我在选中第二个图形时,第二个图形的方框还有路径都没有显示,然后第一个图形,还有第二个图形都消失了,也就是说,一个消图过程少了显示第二个方框和路径这两个步骤~~

再来上一下我的代码:

QGraphicsPolygonItem *preRecItem; //第一个被选中的图形
QGraphicsPixmapItem *prePixItem; //第一个被选中的图形的方框
QGraphicsPolygonItem *lastRecItem; //第二个被选中的图形
QGraphicsPixmapItem *lastPixItem; //第二个被选中的图形的方框


选中第二个相同图形,经过寻址算法之后,是类似下面的代码:(都是在QItemScene上面进行操作的)
void MyScene::dealWithLineRoad() //直线相连的两个图形的消除函数
{
QPen pen(QBrush(Qt::blue), 2);
lastRecItem = this->addPolygon(lastPixItem->mapToScene(lastPixItem->boundingRect()), pen); //显示第二个方框
QGraphicsLineItem *lineItem = this->addLine(prePixItem->x() + 25, prePixItem->y() + 25, lastPixItem->x() + 25, lastPixItem->y() + 25, pen); //显示一条直线路径

//上面的显示完之后,接着就是消除图形,路径,还有方框
prePixItem->hide();
lastPixItem->hide();
this->removeItem(preRecItem);
this->removeItem(lastRecItem);
removeItem(lineItem);

运行之后,就遇到了上面的问题~~
求大神们帮帮忙,好人一生平安~~
...全文
93 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
狐狸小崽子 2013-08-31
  • 打赏
  • 举报
回复
引用 1 楼 ao834391367 的回复:

QPen pen(QBrush(Qt::blue), 2);
lastRecItem = this->addPolygon(lastPixItem->mapToScene(lastPixItem->boundingRect()), pen); //显示第二个方框
QGraphicsLineItem *lineItem = this->addLine(prePixItem->x() + 25, prePixItem->y() + 25, lastPixItem->x() + 25, lastPixItem->y() + 25, pen); //显示一条直线路径

添加之后没刷新吧?这几个动作分别写成不同函数比较好的一点
我试过
lastRecItem = this->addPolygon(lastPixItem->mapToScene(lastPixItem->boundingRect()), pen); //显示第二个方框
this->update();
QGraphicsLineItem *lineItem = this->addLine(prePixItem->x() + 25, prePixItem->y() + 25, lastPixItem->x() + 25, lastPixItem->y() + 25, pen); //显示一条直线路径
this->update();
这样的操作,然后把
prePixItem->hide(); 
lastPixItem->hide();
this->removeItem(preRecItem);
this->removeItem(lastRecItem);
removeItem(lineItem);
封装成一个函数,但还是解决不了耶~
  • 打赏
  • 举报
回复

QPen pen(QBrush(Qt::blue), 2);
lastRecItem = this->addPolygon(lastPixItem->mapToScene(lastPixItem->boundingRect()), pen); //显示第二个方框
QGraphicsLineItem *lineItem = this->addLine(prePixItem->x() + 25, prePixItem->y() + 25, lastPixItem->x() + 25, lastPixItem->y() + 25, pen); //显示一条直线路径

添加之后没刷新吧?这几个动作分别写成不同函数比较好的一点

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧