zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    ueditor富文本编辑在 asp.net MVC下使用步骤
    C#中Socket用法,多个聊天和单一聊天。
    事件与委托的联系和区别
    异步调用backgroudworker
    C#事件作用和用法
    如何遍历protected object转化为数组
    获取后台用户 token 的方法
    Magento2 中如何使用curl
    curl 错误排查方法
    Magento 2 REST API入门
  • 原文地址:https://www.cnblogs.com/gjianli/p/15033357.html
Copyright © 2011-2022 走看看