QT 添加标志位 int flag; 使其用来标识不同的事件效果(不同item 作用不同的鼠标事件)

事件描述:想实现通过点击不同的按钮,触发不同的效果(也就是点击屏幕生成不同的item)

在xxx.h 文件里声明变量  int  flag;

public:
    int  flag;

 

在xxx.cpp文件的构造函数里进行初始化;flag = -1;

 flag=-1;

 

在xxx.cpp函数的其他方法 用else if 进行判断

void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent  *event)
{
    //QGraphicsScene::mousePressEvent(event);
    if(event->button()==Qt::LeftButton)
    {
       // qDebug()<<event->scenePos().x()<<" "<<event->scenePos().y();
        if(!is_null(event->scenePos().x(),event->scenePos().y()))
        {
            if (event->modifiers() == Qt::ShiftModifier)
            {

            }
        }
        else  {
          //  QBrush brush(Qt::red);
            //QPen pen(Qt::red);
            if(flag==0){
                map_node map_node_temp;
                map_node_temp.x=event->scenePos().x();
                map_node_temp.y=event->scenePos().y();
                map_node_temp.node_id=map_nodes->size();
                qDebug()<<"节点x"<<event->scenePos().x();
                qDebug()<<"节点y"<<event->scenePos().y();
                qDebug()<<"节点id"<<map_nodes->size();
                map_nodes->push_back(map_node_temp);
                //输出整个链表的内容
               /* for(int i = 0;i < map_nodes->size();i++){
                    qDebug()<<map_nodes->at(i).x;
                    qDebug()<<map_nodes->at(i).y;
                    qDebug()<<map_nodes->at(i).node_id;
                }*/


                my_ellipse* item = new my_ellipse(0,0,node_size/2);//调用my_ellipse 的方法

                item->setPos(event->scenePos().x(),event->scenePos().y());
                addItem(item);
                emit item_data(map_nodes);//将结点的内容作为信号发送出去
            }else if (flag==1){
                //定义一个矩形的item
             QGraphicsRectItem* charge_item = new QGraphicsRectItem();
             charge_item->setRect(100,30,100,30);
             addItem(charge_item);

            }
            else if (flag==2){}
            else if (flag==3){}
            else if (flag==4){}
            else if (flag==5){}
            else if (flag==6){}
            else {

            }

        }

       emit flash();
    }

}

在具体实现的方法中,加上判断标志符

 m_scene->flag=1;

 

posted @ 2021-07-20 09:41  健丽  阅读(724)  评论(0编辑  收藏  举报