• 5988阅读
  • 5回复

Qgraphicsscene无法响应鼠标操作? [复制链接]

上一主题 下一主题
离线nation20005
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-24
关键词: 求助
Qgraphicview在实现鼠标操作后,Qgaphcisview上加载的scene就无法响应鼠标操作,求高手帮忙,Tks!
离线jdwx

只看该作者 1楼 发表于: 2012-05-24
回 楼主(nation20005) 的帖子
贴代码上来吧。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线nation20005
只看该作者 2楼 发表于: 2012-05-25
Mapview 继承Qgraphicsview  Itemscene继承QGgraphicsscene
void Mapview::mousePressEvent(QMouseEvent *event)
{
    if(event->button()&Qt::LeftButton)
    {
        qDebug()<<event->type();
        presstag=true;
        posx =event->pos().x();
        posy =event->pos().y();
        originalx =this->x();
        originaly =this->y();
    }
}
void Mapview::mouseMoveEvent(QMouseEvent *event)
{
    if(presstag)
    {
     QPointF pointmov =event->pos();
     QScrollBar *hbar =horizontalScrollBar();
     QScrollBar *vbar =verticalScrollBar();
     double offsetx= pointmov.x()-posx;
     double offsety =pointmov.y()-posy;
     if(offsetx>3||offsetx<-3||offsety>3||offsety<-3)
       {
          hbar->setValue(hbar->value()-offsetx);
          vbar->setValue(vbar->value()-offsety);
          posx =event->pos().x();
          posy =event->pos().y();
          emit updateview();
       }
    }
    else
    {
     event->ignore();
    }
}


void Itemscene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QMessageBox msg;
        msg.setText (tr("mouseMoveEvent"));
        msg.exec();
    QGraphicsScene::mouseMoveEvent(event);
}
其中有使用QGgraphcisview::scene将Itemscene对象加载到Mapview对象中来。
Mapview可以相应鼠标操作,Itemscene鼠标操作就被覆盖了,有什么办法可以
区分开来。
求大神,tks!

离线nation20005
只看该作者 3楼 发表于: 2012-05-25
Qgraphcisview的拖动效果,由于要实现其他操作,所以没有用setDragMode(QGraphicsView::ScrollHandDrag)来实现。
离线rpdhunter

只看该作者 4楼 发表于: 2012-06-19
由于Qt事件的机理,事件由最先遇到的处理函数处理。楼主要想QGraphicsView不截留事件,只需要在Mapview::mouseMoveEvent函数最后加入一行代码:

QGraphicsView::mouseMoveEven(event)

就可以了
离线tlcugb

只看该作者 5楼 发表于: 2012-06-19
添加一句,好像是setmousetacking(true)
快速回复
限100 字节
 
上一个 下一个