QGraphicsView中scene添加一个动态Item的问题

lanjianchun 2011-10-07 11:19:24
前面发过几次帖子了 问题还是没解决

是这样的 Scene中有 background road build text 这四个静态的层 就是不动的

现在要添加个运动的点 mypoint 我直接加到Scene中 每秒更新一次

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); //重绘
void timerEvent(QTimerEvent *); //每秒接受处理一次GPS数据


这么做 不能显示运动的点 哪里出问题了 还是方法不对

具体的做法 我贴在QTCN上了 麻烦高手看看

http://www.qtcn.org/bbs/read-htm-tid-45900.html
...全文
570 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanjianchun 2011-10-08
  • 打赏
  • 举报
回复
感谢 hzymlx 问题 找到了
同时也解决了 程序里的一点问题

超出的scene后 是不会调用paint的 以前程序的错误导致的 呵呵
lanjianchun 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hzymlx 的回复:]
invalidate()
update()
[/Quote]

具体怎么用还不是很清楚, 谷歌先找找看
hzymlx 2011-10-07
  • 打赏
  • 举报
回复
invalidate()
update()
lanjianchun 2011-10-07
  • 打赏
  • 举报
回复
用setPos终于可以运行timerEvent了 可是paint 没有运行 我把新代码贴出来

#include "mypoint.h"
#include <QGraphicsView>
#include <QtGui>

mypoint::mypoint()
{
x1 = 117.55645;
y1 = 26.19415;
x2 = 117.56506;
y2 = 26.20387;
wx = x2-x1;
hy = y2-y1;
flag=true;
startTimer(2000);
i=0.001;
lat=117.561;
lon=26.1867;

}

QRectF mypoint::boundingRect() const
{

return QRectF(-500,-1000,1000,2000);
}

void mypoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setPen(Qt::black);
if(biaozhi)
{
painter->setBrush(Qt::red);
}
painter->drawRect(0,0,10,10);
qDebug()<<"paint";
}

void mypoint::timerEvent(QTimerEvent *)
{
QPointF mypoint;
lat=lat+i;
lon=lon+i;
mypoint.setX(lat);
mypoint.setY(lon);

MayPoint=convertCoord(mypoint.x(),mypoint.y());
if(!flag)
{
biaozhi=true;
}
setPos(mapToParent(MayPoint.x(),MayPoint.y()));

}

QPointF mypoint::convertCoord(double x, double y)
{
QPointF point;
w=1000;
h=2000;
point = QPointF(((x-x1)/wx)*w-w/2,-(((y-y1)/hy)*h-h/2));
return point;
}

用updata可以吗 我加入updata 报错了 为啥paint没执行呢
lanjianchun 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hzymlx 的回复:]
没有改变mypoint点在scene上的坐标吧。用setPos
[/Quote]

我试试
hzymlx 2011-10-07
  • 打赏
  • 举报
回复
没有改变mypoint点在scene上的坐标吧。用setPos
lanjianchun 2011-10-07
  • 打赏
  • 举报
回复
还是把代码贴出来 让大家帮我分析分析

#include "mypoint.h"

mypoint::mypoint()
{
x1 = 117.55645;
y1 = 26.19415;
x2 = 117.56506;
y2 = 26.20387;
wx = x2-x1; //初始化一些参数
hy = y2-y1;
flag=true;
startTimer(2000);
i=0.001;

}

QRectF mypoint::boundingRect() const
{
qreal radius=10;
return QRectF(-radius,-radius,2*radius,2*radius);
}

void mypoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
qreal radius=10;
QPointF points[4] = {
QPointF(MayPoint.x()-radius,MayPoint.y()),
QPointF(MayPoint.x(),MayPoint.y()+radius),
QPointF(MayPoint.x()+radius,MayPoint.y()),
QPointF(MayPoint.x(),MayPoint.y()-radius),
};
painter->setPen(Qt::black);
if(biaozhi)
{
painter->setBrush(Qt::red);
}
painter->drawPolygon(points,4);
qDebug()<<"paint";
}

void mypoint::timerEvent(QTimerEvent *)
{
QPointF mypoint;
qreal lat=117.561+i;
qreal lon=26.1862+i;
mypoint.setX(lat);
mypoint.setY(lon);

MayPoint=convertCoord(mypoint.x(),mypoint.y());
if(!flag)
{
biaozhi=true;
}
qDebug()<<"time out ";


}

QPointF mypoint::convertCoord(double x, double y) //经纬度转换为SCENE中的坐标
{
QPointF point;
point = QPointF(((x-x1)/wx)*w-w/2,-(((y-y1)/hy)*h-h/2));
return point;
}


mypoint *my=new mypoint;
scene->addItem(my); 这界面
lanjianchun 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]
这种东西,动还是静没有任何区别吧??动的话,加个定时器,适时地 setPos 不就行了?为何要涉及手动去 paint呢?

题外:
再就是在你在 qtcn 中贴的的东西,还代码编译问题,而且也没看出和你这儿描述的有什么必然联系。
[/Quote]

好吧 那个帖子是我 前几天发的 到现在编译通过了 但是我说的动态那层好像是没有显示出来
timerEvent里的调试信息 也没打印出来 意思就是根本就没运行这个timerEvent 和 paint
dbzhang800 2011-10-07
  • 打赏
  • 举报
回复
这种东西,动还是静没有任何区别吧??动的话,加个定时器,适时地 setPos 不就行了?为何要涉及手动去 paint呢?

题外:
再就是在你在 qtcn 中贴的的东西,还代码编译问题,而且也没看出和你这儿描述的有什么必然联系。

21,493

社区成员

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

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