首页 > 其他分享 >QT实现校园导航

QT实现校园导航

时间:2024-10-14 09:17:34浏览次数:3  
标签:QT int void 校园 mgraph DijkstraFindPath include 导航 MainWindow

//MainWidget.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "mapwidget.h"
#include <QToolButton>
#include <QGraphicsLineItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QLabel>
#include <QComboBox>
#include <QSpinBox>
#include <QTextEdit>
#include <QPainter>
#include <QVector>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void createToolBar();
    void paintEvent (QPaintEvent *);
    void setStart(int X, int Y);
    void setEnd(int X, int Y);
    void setNextPos (int index);
    void initScene();
public slots:
    void setStartStation();
    void setEndStation();
    void FindPath();
    void Clear();
private:
    MapWidget *mapWidget;
    QLabel *startLabel;
    QLabel *endLabel;
    QComboBox *startComboBox;
    QComboBox *endComboBox;
    QToolButton *findPathBtn;
    QToolButton *clearBtn;

    QGraphicsScene *scene;
    QGraphicsView *view;

    int startX, startY, endX, endY;
    QVector<int> nextPath;

    struct ArcCell{  //弧信息
        int adj;     //对无权图有1,0表示是否相邻,对带权图,则为权值类型
    //    string info; //该弧的相关信息
    };

    //内部类
    static const int MAX_VERTEX_NUM = 31;
    static const int INF = 999999;

    struct MGraph{
        QVector<int> vexs;                                    //顶点集合
        //临接矩阵
        ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
        int vexnum;                                           //顶点数
        int arcnum;                                           //边数
    //    int kind;                                           //图的类型
    };




    class DijkstraFindPath
    {
    public:
        DijkstraFindPath();
        MGraph mgraph;
        void CreateGraph();
//        void ShortestPath(int v0, PathMatrix &path, ShortPathTable &DP, int prev[]);
        int prev[MAX_VERTEX_NUM];  //最短路上的前驱顶点
        int d[MAX_VERTEX_NUM];     //表示边e = (u,v)的权值(不存在时为INF,不过d[i][i]=0)
        bool used[MAX_VERTEX_NUM]; //已经使用过的图
        void dijkstra(int startPos);      //求从起点startPos出发到各个顶点的最短距离
        QVector<int> get_Path(int endPos);//到顶点endPos的最短路
    };

    DijkstraFindPath *dj;
};

#endif // MAINWINDOW_H

//MainWidget.cpp
//最短路径算法,和界面的实现

#include "mainwindow.h"
#include <qdebug.h>
#include <QToolBar>
#include <QtAlgorithms>
#include <iostream>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
//    mapWidget = new MapWidget;
//    painter = new QPainter();
    dj = new MainWindow::DijkstraFindPath();
    dj->CreateGraph ();
    scene = new QGraphicsScene;
    scene->setSceneRect (-100, -100, 700, 700);
    initScene();
    view = new QGraphicsView;
    view->setScene (scene);
    view->setMinimumSize (800, 800);
    view->show ();
    setCentralWidget (view);
    createToolBar ();  //实现一个工具栏
//    setCentralWidget (mapWidget);
//    setMinimumSize (600, 400);  //设置最小尺寸
}
MainWindow::DijkstraFindPath::DijkstraFindPath()
{
    mgraph.vexnum = 31;                      //初始化点数目
       for (int i = 0; i < mgraph.vexnum; i++) //初始化点编号
           mgraph.vexs.push_back (i);
       mgraph.arcnum = 80;                     //暂定
       for (int i = 0; i < mgraph.vexnum; i++) {
           for (int j = 0; j < mgraph.vexnum; j++) {
               if (i == j)
                   mgraph.arcs[i][j].adj = 0;
               else
                   mgraph.arcs[i][j].adj = INF;
   //            mgraph.arcs[i][j].info = "";
           }
       }
}
void MainWindow::DijkstraFindPath::CreateGraph ()
{
        mgraph.arcs[0][1].adj = mgraph.arcs[1][0].adj = 45;    //6 - 5
        mgraph.arcs[0][6].adj = mgr

标签:QT,int,void,校园,mgraph,DijkstraFindPath,include,导航,MainWindow
From: https://blog.csdn.net/booming2/article/details/142909014

相关文章

  • 【Python开发技术之PyQt5精品教学】第36课--PyQt5 拖放功能
    PyQt5拖放功能拖放功能对用户来说非常直观。它被应用于许多桌面应用程序,用户可以将对象从一个窗口复制或移动到另一个窗口。基于MIME的拖放数据传输是基于QDrag类实现的。QMimeData对象将数据与对应的MIME类型关联起来。数据被存储在剪贴板中,然后在拖放过程中使用。以下QMi......
  • 【Python开发技术之PyQt5精品教学】第32课--PyQt5 QDialog类
    PyQt5QDialog类QDialog 是一个顶层窗口小部件,主要用于收集用户的响应。它可以配置为 模态 (它会阻塞其父窗口)或 非模态 (对话框窗口可以被绕过)。PyQt API有许多预配置的对话框小部件,例如InputDialog,FileDialog,FontDialog等。示例在下面的示例中,对话框窗口的 WindowMo......
  • 【Python开发技术之PyQt5精品教学】第24课--PyQt5 QTab小部件
    PyQt5QTab小部件如果一个表单具有太多字段无法同时显示,则可以将它们安排在选项卡窗口小部件的每个选项卡下的不同页面中。提供了一个选项卡栏和一个页面区域。第一个选项卡下的页面会显示,其他页面会隐藏。用户可以通过点击所需的选项卡来查看任何页面。以下是QTabWidget类的......
  • 【Python开发技术之PyQt5精品教学】第31课--PyQt5 QCalendar小工具
    PyQt5QCalendar小工具QCalendar小工具是一个有用的日期选择器控件。它提供了基于月份的视图。用户可以通过鼠标或键盘选择日期,默认为今天的日期。还可以指定日历的日期范围。以下是这个类的一些实用方法:序号方法和描述1setDateRange() :设置可选择的较低和较高日期。2setFi......
  • QToss:基于.NET架构的跨境电商的工具,助力企业实现智能数据营销
    2024年10月13日下午参加了一场在深圳举办的跨境电商大佬们的聚会,现场参加的人数上千人。大会分享嘉宾中有位来自美国的,他告诉我们不用担心美国政府会把TikTok禁掉,TikTok在全世界都很受欢迎的。回归正题说说今天大会上发布的这个产品QtossAI选品,这是一个由.NET助力的AI驱动跨境......
  • 标题、导航、目录添加序号
    在主题文件夹添加base.user.css文件,把下面的内容复制进去。/***************************************HeaderCountersinContent**************************************//**initializecsscounter*/#write{counter-reset:h1}h1{counter-reset:h2......
  • qt深入解析
    1.QtIO设备类型:顺序存储设备:如网卡。。随机存储设备:如.txt..Qt中IO设备继承图 Qt中的文件系统通用开发库,跨平台QIODeviceIO父类,提供字节块读写通用操作和基本接口QFileDevice提供文件操作通用实现QFile访问本地文件或嵌入资源QTemporayFile创建和访问本地系统的临......
  • 基于SpringBoot+Vue的校园互助任务平台设计和实现(源码+lw+部署+讲解)
    详细视频演示请联系我获取更详细的演示视频具体实现截图技术可行性分析经过调研与分析,我认为使用SpringBoot、Vue和MySQL构建本系统具有很高的技术可行性。具体而言,SpringBoot作为轻量级的Java开发框架,能够快速搭建和简化配置,提高开发效率和降低维护成本;Vue作......
  • 纯flex布局实现传统导航三栏布局
    前情提要flex布局仍然是现在主流的布局方式,但是我实在看不下去csdn上的关于flex的教程了本来想更加细致地讲解flex布局的,可是我比较懒,直接实现一个比较经典的布局吧效果图实现代码 HTML5code:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • Qt/C++开源控件 圆形进度条
    Qt/C++开源控件圆形进度条简约风格:设计简洁,没有多余的元素,清晰地显示了当前进度。颜色对比:使用了亮色的蓝色来标示进度,与深色背景形成鲜明对比,使得进度指示一目了然。清晰的刻度:刻度线清晰,尽管没有标注所有数字,但通过较长的刻度线在50和100的位置,用户可以很容易地估计......