1.项目描述
趁课余时间做了一个小作品,项目是校园地图,主要目的是练习Qt和一些基本的数据结构和算法。该项目的主要功能是从下拉列表中选择出发地和目的地,然后地图上可以显示路线。主要的显示方法是通过贴图来显示。时间久远才想起来整理,当时也是经历了一个星期的断断续续的修补,最后形成了一个比较完善的小地图软件。
2.基本思路
01.首先需要构建路网(很重要),我首先写了一个该版本,然后把路网标记后保存。具体用来储存的数据结构是一个具有节点信息的结构体,然后借用C++的 vector (vector真的太好用了)来记录所有的路网节点。
typedef struct road_dot{ int i; // 该节点的id int vistable; //该节点是否可访问 cv::Point self; //该节点在地图上的位置 std::vector<size_t> others_id; // 保存与该节点相连的节点的id }Road_node;
下面是我用来标记路网并自动储存的模块:

/************************************************************************************************ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * These under codes construct a tool to get the road nodes infomation * * <2016-10-29><wuhui> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ void MainWindow::mousePressEvent(QMouseEvent *event) { if(0<x&&x<1480&&0<y&&y<800) // if on the pic { Road_node new_node; new_node.self = Point(x,y); new_node.i = 200; // not a pos cv::circle(img,Point(x,y),6,cv::Scalar(255,0,255),-1); qimg = Mat2QImage(img); ui->pic->setPixmap(QPixmap::fromImage(qimg)); if(!first_node) {start_node = new_node;start_set_flag = 1; first_node =2;pre_nodes_id = 0;} for(int i = 0;i<point.size();i++) { if((abs(x-point[i].x) <10 )&& (abs(y-point[i].y)<10)) // if at pos { new_node.i = i; qDebug()<<"this is pos "<<i; break; } } road.push_back(new_node);// record this new node ; for(int i = 0;i<road.size()-1;i++) { if((abs(x-road[i].self.x) <10 )&& (abs(y-road[i].self.y)<10)) // if at node { // yes road.p