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;