• 10826阅读
  • 15回复

关于鼠标移动时graphicsscene刷新背景的问题 [复制链接]

上一主题 下一主题
离线gauxten
 

只看楼主 倒序阅读 楼主  发表于: 2011-02-09
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-02-15) —
如题,我在scene的drawbackground中画好了东西,需要在鼠标移动的时候不停地刷新,但是我发现鼠标移动的时候update 函数 并不重绘drawbackground,只有在鼠标停止后才触发,请教高人,这是怎么回事,如何解决啊,万分感谢~~~~
[ 此帖被gauxten在2011-02-10 08:55重新编辑 ]
离线gauxten

只看该作者 1楼 发表于: 2011-02-11
求高人指点啊
离线引子
只看该作者 2楼 发表于: 2011-02-11
把你的鼠标移动事件代码贴出来看看
步子大了扯着蛋!
离线tieqilin
只看该作者 3楼 发表于: 2011-02-11
我也想知道呀
离线gauxten

只看该作者 4楼 发表于: 2011-02-12
void QGraphicChartScene::DrawMap()
{
    tempPix = QImage(width(), height(), QImage::Format_ARGB32);
    pp->begin(&tempPix);
    DrawMaps (pp, QRect(QPoint(0,0), QPoint(width(), height())), 0);
    pp->end();
    pix = tempPix;
}

void QGraphicChartScene::drawBackground ( QPainter * painter, const QRectF & rect )
{              
     painter->drawImage(int(sceneRect ().left()),int(sceneRect().top()), pix);
}
离线gauxten

只看该作者 5楼 发表于: 2011-02-12
void  QGraphicChartScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QPoint point = QPoint(event->scenePos().x(),event->scenePos().y());
             if (m_bDown == 1)     //鼠标按下
            {      
                DrawDragingMap((point.rx() - m_DownPoint.rx()),(point.ry() - m_DownPoint.ry()),0);//拖动背景
                this->DrawMap();//重绘
                this->update();//刷新background
                m_DownPoint = point;
            }
    QGraphicsScene::mouseMoveEvent(event);
}
结果我用QDEBUG测试 只有鼠标停止,才刷新,移动的时候不刷新,纠结。。。。
[ 此帖被gauxten在2011-02-14 08:54重新编辑 ]
离线引子
只看该作者 6楼 发表于: 2011-02-12
鼠标按下事件和移动事件最好分开写
这个函数void  QGraphicChartScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)你没贴对吧,怎么大括号都不对呢
步子大了扯着蛋!
离线gauxten

只看该作者 7楼 发表于: 2011-02-14
回 6楼(引子) 的帖子
恩 我贴的不对,少个括号,我只是在DOWN中 让m_bDown  = 1 然后就开始移动,但是无解,怎么弄都不刷新,只有鼠标停下才刷新, (代码改的太乱,我就跳刷新的那个地方粘贴了)
[ 此帖被gauxten在2011-02-14 08:46重新编辑 ]
离线gauxten

只看该作者 8楼 发表于: 2011-02-15
有高人能指点一下吗~~~
离线roywillow

只看该作者 9楼 发表于: 2011-02-15
如果需要始终跟踪鼠标移动的话,mouseTracking必须是true,否则只有按下鼠标才会跟踪
update似乎不会立刻更新,用repaint看看
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线gauxten

只看该作者 10楼 发表于: 2011-02-15
引用第9楼roywillow于2011-02-15 10:41发表的 :
如果需要始终跟踪鼠标移动的话,mouseTracking必须是true,否则只有按下鼠标才会跟踪
update似乎不会立刻更新,用repaint看看

感谢 roywillow   我这就去试试
离线gauxten

只看该作者 11楼 发表于: 2011-02-15
回 9楼(roywillow) 的帖子
repaint是graphicsview中的函数,  我的mousemove写在graphicsscene中了。。。。
离线roywillow

只看该作者 12楼 发表于: 2011-02-15
repaint是QWidget的函数,所以只有view有应该……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线gauxten

只看该作者 13楼 发表于: 2011-02-16
回 12楼(roywillow) 的帖子
感谢  roywillow
我重写了显示函数,果然repaint 好用,终于解决了,非常感谢!
离线roywillow

只看该作者 14楼 发表于: 2011-02-16
回 13楼(gauxten) 的帖子
不妨说说思路吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线gauxten

只看该作者 15楼 发表于: 2011-02-17
回 14楼(roywillow) 的帖子
老套路,在需要的时候重绘生成一张pixmap并复制给一张temppixmap,然后在paintevent或者drawbackground中反复画这张temppixmap,因为我需要在鼠标移动的时候不停的刷新,所以才这么做
快速回复
限100 字节
 
上一个 下一个