Showing preview only (1,878K chars total). Download the full file or copy to clipboard to get everything.
Repository: BaiJiazm/SubwayTransferSystem
Branch: master
Commit: bbcd4767b794
Files: 91
Total size: 1.7 MB
Directory structure:
gitextract_5p2saq3a/
├── README.md
├── SubwayTransferSystem/
│ ├── SubwayTransferSystem.pro
│ ├── SubwayTransferSystem.pro.user
│ ├── apphelp.cpp
│ ├── apphelp.h
│ ├── data/
│ │ ├── demo.txt
│ │ ├── outLine.txt
│ │ └── subwayLine.txt
│ ├── graphics_view_zoom.cpp
│ ├── graphics_view_zoom.h
│ ├── html/
│ │ ├── helpAddByText.html
│ │ ├── helpAddConnection.html
│ │ ├── helpAddLine.html
│ │ ├── helpAddStation.html
│ │ ├── helpTransfer.html
│ │ └── helpWatch.html
│ ├── line.h
│ ├── main.cpp
│ ├── mainwindow.cpp
│ ├── mainwindow.h
│ ├── mainwindow.ui
│ ├── managelines.cpp
│ ├── managelines.h
│ ├── managelines.ui
│ ├── myview.cpp
│ ├── myview.h
│ ├── querytransfer.cpp
│ ├── querytransfer.h
│ ├── querytransfer.ui
│ ├── resource.qrc
│ ├── station.cpp
│ ├── station.h
│ ├── subwaygraph.cpp
│ └── subwaygraph.h
├── build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/
│ ├── .qmake.stash
│ ├── Makefile
│ ├── Makefile.Debug
│ ├── Makefile.Release
│ ├── object_script.SubwayTransferSystem.Debug
│ ├── object_script.SubwayTransferSystem.Release
│ ├── release/
│ │ ├── apphelp.o
│ │ ├── graphics_view_zoom.o
│ │ ├── main.o
│ │ ├── mainwindow.o
│ │ ├── managelines.o
│ │ ├── moc_apphelp.cpp
│ │ ├── moc_apphelp.o
│ │ ├── moc_graphics_view_zoom.cpp
│ │ ├── moc_graphics_view_zoom.o
│ │ ├── moc_mainwindow.cpp
│ │ ├── moc_mainwindow.o
│ │ ├── moc_managelines.cpp
│ │ ├── moc_managelines.o
│ │ ├── moc_predefs.h
│ │ ├── qrc_resource.cpp
│ │ ├── qrc_resource.o
│ │ ├── station.o
│ │ ├── subwaygraph.o
│ │ └── translations/
│ │ ├── qt_bg.qm
│ │ ├── qt_ca.qm
│ │ ├── qt_cs.qm
│ │ ├── qt_da.qm
│ │ ├── qt_de.qm
│ │ ├── qt_en.qm
│ │ ├── qt_es.qm
│ │ ├── qt_fi.qm
│ │ ├── qt_fr.qm
│ │ ├── qt_gd.qm
│ │ ├── qt_he.qm
│ │ ├── qt_hu.qm
│ │ ├── qt_it.qm
│ │ ├── qt_ja.qm
│ │ ├── qt_ko.qm
│ │ ├── qt_lv.qm
│ │ ├── qt_pl.qm
│ │ ├── qt_ru.qm
│ │ ├── qt_sk.qm
│ │ └── qt_uk.qm
│ ├── ui_mainwindow.h
│ └── ui_managelines.h
├── dealData/
│ ├── line.txt
│ ├── main.cpp
│ ├── outLine.txt
│ └── readme.md
├── osmXmlParser/
│ ├── readme.md
│ ├── route.osm
│ ├── src/
│ │ └── osmXmlParser/
│ │ └── MyOsmParser.java
│ ├── station.osm
│ ├── station.txt
│ └── subwayLine.osm
└── 设计说明书.docx
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
## 上海地铁换乘指南系统(SubwayTransferSystem)
#### 简介
本项目是在2017年暑期所写的上海地铁换乘指南系统,是从零学QT,在两周左右无借鉴任何相同或相似程序全部由自己一人完成的小项目。
个人觉得还是非常用心的,是一个不错的小项目。如果你有兴趣想借鉴学习或者觉得还不错的话,可以Star一下哦。
如果程序本身有任何Issue或者你在其中有什么问题,欢迎在[Issue](https://github.com/BaiJiazm/SubwayTransferSystem/issues)部分下提出或者联系[b110011@qq.com](http://mailto:b110011@qq.com)
#### 项目背景和要求
上海的地铁交通网络已经基本成型,建成的地铁线十多条,站点上百个,现需建立一个换乘指南打印系统,通过输入起点和终点站,打印出地铁换乘指南,指南内容包括起点站、换乘站、终点站。
* 图形化显示地铁网络结构,能动态添加地铁线路和地铁站点。
* 根据输入起点和终点站,显示地铁换乘指南。
* 通过图形界面显示乘除路径。
#### 功能介绍
主要功能包含地铁网络线路的查看,地铁换乘指南查询,动态添加线路站点等。
* 线路图查看:
* 查看上海地铁网络线路图,包括通过键盘、鼠标拖放、放大缩小等简易查看操作;
* 查看地铁线路信息,包括线路段、包含站点等;
* 查看地铁站的详细信息,包括站点地理坐标、所属线路等
* 换乘指南查询:
* 提供地铁换乘查询,可通过视图方便的查看乘坐路线和换乘路线;
* 提供最小出行时间的换乘策略指南
* 提供最小换乘次数的换乘策略指南
* 动态添加线路:
* 动态添加线路,可根据需要新增线路;
* 动态添加站点,可根据需要新增站点;
* 动态添加连接,可根据需要新增站点连接;
* 文本方式简易添加,方便快捷;
* 帮助:
* 提供软件使用帮助和说明;
* 关于:
* 提供软件制作信息;
#### 开发平台
* 计算机型号 :惠普Pavilion M4
* 计算机内存 :4.00GB
* CPU :Intel Core i5 2.6GHz
* 操作系统 :Windows 10 家庭版
* 开发语言 :C++(C++11标准以上)
* 开发框架 :QT
* 集成开发环境:Qt Version 5.9.1
* 编译器 :MinGW 32bit
* 运行环境 :
* 可在上述集成环境下运行;
* 通过windeployqt.exe及Enigma Virtual Box进行整合压缩为发布为了一个LinkListVisualizer.exe文件,可在普通windows机型下运行。
#### 项目结构
```
---/SubwayTransferSystem
---/功能源码
/build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release
---/release文件
/dealData
---/数据处理模块
/osmXmlParser
---/数据处理模块
/SubwayTransferSystem_boxed.exe
/README.md
/设计说明书.docx
```
### 主要功能预览
##### 总览图

##### 线路查询1

##### 线路查询2

##### 添加新线路

##### 添加新站点

##### 添加新连接

##### 文本方式直接添加

##### 视图查看放大
* 点击工具栏中放大按钮;
* 或选择“视图”下“放大”;
* 或按下快捷键“Ctrl+L”;
* 或直接在视图区域进行鼠标滚轮放大操作
* 可进行视图的放大,方便查看。

##### 视图查看缩小
* 点击工具栏中缩小按钮;
* 或选择“视图”下“缩小”;
* 或按下快捷键“Ctrl+S”;
* 或直接在视图区域进行鼠标滚轮缩小操作
* 可进行视图的缩小,方便查看。

##### 鼠标悬停1
* 鼠标除能直接放大和缩小视图外,在查看视图信息有重要作用:
* 鼠标滚轮直接放大缩小视图;
* 通过鼠标点击后拖动,可直接进行视图移动;
* 将鼠标悬停在站点上,会提示站点的详细信息,如悬停在“曹杨路”站上,会有曹杨路地铁站的详细信息;

##### 鼠标悬停2
* 将鼠标悬停在线路上,会提示线路的详细信息,如悬停在“曹杨路”站和“镇坪路”之间线路上,会有线路的详细信息;

#### 更多
了解项目的更多信息,请查看文档[设计说明书](https://github.com/BaiJiazm/SubwayTransferSystem/blob/queryByMinwindow/%E8%AE%BE%E8%AE%A1%E8%AF%B4%E6%98%8E%E4%B9%A6.docx)
================================================
FILE: SubwayTransferSystem/SubwayTransferSystem.pro
================================================
#-------------------------------------------------
#
# Project created by QtCreator 2017-08-03T12:33:22
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = SubwayTransferSystem
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp \
graphics_view_zoom.cpp \
station.cpp \
subwaygraph.cpp \
managelines.cpp \
apphelp.cpp
HEADERS += \
mainwindow.h \
graphics_view_zoom.h \
station.h \
line.h \
subwaygraph.h \
managelines.h \
apphelp.h
FORMS += \
mainwindow.ui \
managelines.ui
RESOURCES += \
resource.qrc
================================================
FILE: SubwayTransferSystem/SubwayTransferSystem.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.3.1, 2017-08-22T18:44:29. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{b7107fb5-2218-4116-bee8-7edb9d964112}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.1 MinGW 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.1 MinGW 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.591.win32_mingw53_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Going/DsApplication2/build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Going/DsApplication2/build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Going/DsApplication2/build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">SubwayTransferSystem</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/Going/DsApplication2/SubwayTransferSystem/SubwayTransferSystem.pro</value>
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">SubwayTransferSystem.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">D:/Going/DsApplication2/build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">18</value>
</data>
<data>
<variable>Version</variable>
<value type="int">18</value>
</data>
</qtcreator>
================================================
FILE: SubwayTransferSystem/apphelp.cpp
================================================
#include "apphelp.h"
#include <QIcon>
#include <QDesktopWidget>
#include <QRect>
#include <QPoint>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFile>
#include <QDir>
//构造函数
AppHelp::AppHelp(QWidget *parent):QWidget(parent)
{
createHelpUI();
setWindowTitle(tr("使用帮助"));
setWindowIcon(QIcon(":/icon/icon/help.png"));
setMinimumSize(600,400);
QDesktopWidget desktop;
QRect rect = desktop.availableGeometry(desktop.primaryScreen());
QPoint center = rect.center();
center.setX(center.x() - this->width()/2);
center.setY(center.y() - this->height()/2);
move(center);
connect(listWidget, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(listWidgetChanged(QListWidgetItem*)));
}
//创建UI
void AppHelp::createHelpUI()
{
QHBoxLayout *mainLayout = new QHBoxLayout;
setLayout(mainLayout);
listWidget = new QListWidget;
listWidget->addItem(tr("网络图"));
listWidget->addItem(tr("换乘指南"));
listWidget->addItem(tr("添加线路"));
listWidget->addItem(tr("添加站点"));
listWidget->addItem(tr("添加连接"));
listWidget->addItem(tr("文本添加"));
listWidget->setFixedWidth(100);
mainLayout->addWidget(listWidget);
QVBoxLayout *rightLayout = new QVBoxLayout;
textBrowser = new QTextBrowser;
textBrowser->setFont(QFont("consolas"));
textBrowser->setOpenExternalLinks(true);
textBrowser->setOpenLinks(true);
rightLayout->addWidget(textBrowser);
mainLayout->addLayout(rightLayout);
listWidget->setCurrentItem(listWidget->item(0));
listWidgetChanged(listWidget->item(0));
}
//当前列表项变化
void AppHelp::listWidgetChanged(QListWidgetItem* item) {
if (listWidget->item(0) == item) {
QFile txtFile(":/html/html/helpWatch.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
else if(listWidget->item(1)==item)
{
QFile txtFile(":/html/html/helpTransfer.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
else if(listWidget->item(2)==item)
{
QFile txtFile(":/html/html/helpAddLine.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
else if(listWidget->item(3)==item)
{
QFile txtFile(":/html/html/helpAddStation.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
else if(listWidget->item(4)==item)
{
QFile txtFile(":/html/html/helpAddConnection.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
else if(listWidget->item(5)==item)
{
QFile txtFile(":/html/html/helpAddByText.html");
txtFile.open(QIODevice::ReadOnly);
textBrowser->setHtml(txtFile.readAll());
txtFile.close();
}
}
================================================
FILE: SubwayTransferSystem/apphelp.h
================================================
#ifndef APPHELP_H
#define APPHELP_H
#include <QWidget>
#include <QPushButton>
#include <QTextBrowser>
#include <QStackedWidget>
#include <QListWidget>
class AppHelp : public QWidget
{
Q_OBJECT
public:
//构造函数
explicit AppHelp(QWidget *parent = 0);
//创建UI
void createHelpUI();
private slots:
//当前列表项变化
void listWidgetChanged(QListWidgetItem*);
private:
QListWidget *listWidget;
QTextBrowser *textBrowser;
};
#endif // APPHELP_H
================================================
FILE: SubwayTransferSystem/data/demo.txt
================================================
id: 5
name: 5号线
colour: #9253B2
fromTo: 莘庄 闵行开发区
totalStations: 11
1 莘庄 121.385379,31.111193
2 春申路 121.385937,31.098112
3 银都路 121.390143,31.089365
4 颛桥 121.401944,31.066945
5 北桥 121.409755,31.045033
6 剑川路 121.416578,31.026243
7 东川路 121.420012,31.018225
8 金平路 121.410313,31.011237
9 华宁路 121.395292,31.007265
10 文井路 121.38083,31.003366
11 闵行开发区 121.369715,31.000423
================================================
FILE: SubwayTransferSystem/data/outLine.txt
================================================
id: 1
name: 1号线
colour: #E70012
fromTo: 富锦路 莘庄
totalStations: 28
1 富锦路 121.424661,31.39226
2 友谊西路 121.427726,31.381227
3 宝安公路 121.430975,31.369369
4 共富新村 121.433936,31.355004
5 呼兰路 121.437711,31.339703
6 通河新村 121.441498,31.331094
7 共康路 121.447455,31.318642
8 彭浦新村 121.448141,31.305883
9 汶水路 121.449858,31.292242
10 上海马戏城 121.452004,31.279846
11 延长路 121.455265,31.271409
12 中山北路 121.459128,31.258717
13 上海火车站 121.455523,31.249692
14 汉中路 121.459128,31.2414
15 新闸路 121.467882,31.238538
16 人民广场 121.472989,31.232814
17 黄陂南路 121.47329,31.222502
18 陕西南路 121.460115,31.217107
19 常熟路 121.451059,31.213033
20 衡山路 121.446725,31.20426
21 徐家汇 121.438056,31.191522
22 上海体育馆 121.436511,31.181903
23 漕宝路 121.43458,31.168097
24 上海南站 121.43046,31.154693
25 锦江乐园 121.414324,31.142059
26 莲花路 121.402994,31.130929
27 外环路 121.393167,31.120936
28 莘庄 121.385184,31.111237
id: 2
name: 2号线
colour: #008000
fromTo: 浦东国际机场 徐泾东
totalStations: 30
1 浦东国际机场 121.806436,31.149596
2 海天三路 121.796878,31.168459
3 远东大道 121.755346,31.199485
4 凌空路 121.723791,31.192826
5 川沙 121.69821,31.186741
6 华夏东路 121.681098,31.196553
7 创新中路 121.673133,31.214327
8 唐镇 121.656269,31.214107
9 广兰路 121.619354,31.211042
10 金科路 121.601662,31.204405
11 张江高科 121.587687,31.201832
12 龙阳路 121.557884,31.204102
13 世纪公园 121.552556,31.215723
14 上海科技馆 121.544439,31.21882
15 世纪大道 121.527221,31.228764
16 东昌路 121.515556,31.23327
17 陆家嘴 121.502937,31.237991
18 南京东路 121.475137,31.232781
19 人民广场 121.472894,31.232943
20 南京西路 121.459971,31.229853
21 静安寺 121.445314,31.223493
22 江苏路 121.430635,31.220408
23 中山公园 121.416649,31.219879
24 娄山关路 121.404058,31.211158
25 威宁路 121.387285,31.21487
26 北新泾 121.373994,31.216357
27 淞虹路 121.359588,31.218212
28 虹桥2号航站楼 121.327625,31.194014
29 虹桥火车站 121.318911,31.193987
30 徐泾东 121.299204,31.188367
id: 3
name: 3号线
colour: #FFD100
fromTo: 上海南站 江杨北路
totalStations: 29
1 上海南站 121.430041,31.154579
2 石龙路 121.443205,31.157949
3 龙漕路 121.444346,31.16961
4 漕溪路 121.43841,31.176746
5 宜山路 121.427817,31.186164
6 虹桥路 121.420814,31.197524
7 延安西路 121.417062,31.209616
8 中山公园 121.415683,31.218026
9 金沙江路 121.41342,31.232338
10 曹杨路 121.417454,31.238943
11 镇坪路 121.429856,31.246135
12 中潭路 121.441143,31.254316
13 上海火车站 121.458052,31.24929
14 宝山路 121.476076,31.251491
15 东宝兴路 121.480024,31.259782
16 虹口足球场 121.479252,31.269613
17 赤峰路 121.482427,31.280984
18 大柏树 121.483286,31.289273
19 江湾镇 121.485174,31.305518
20 殷高西路 121.484616,31.319927
21 长江南路 121.491182,31.331878
22 淞发路 121.500409,31.344817
23 张华浜 121.498521,31.3579
24 淞滨路 121.492556,31.371019
25 水产路 121.488178,31.381095
26 宝杨路 121.479466,31.395126
27 友谊路 121.475904,31.403844
28 铁力路 121.460798,31.407947
29 江杨北路 121.439984,31.407617
id: 4
name: 4号线
colour: #471E86
fromTo: 宜山路 虹桥路
totalStations: 26
1 宜山路 121.427194,31.186717
2 上海体育馆 121.436721,31.182311
3 上海体育场 121.443588,31.184955
4 东安路 121.454917,31.190021
5 大木桥路 121.463844,31.194353
6 鲁班路 121.474487,31.198685
7 西藏南路 121.489507,31.201621
8 南浦大桥 121.499635,31.207935
9 塘桥 121.51869,31.209623
10 蓝村路 121.527627,31.211672
11 浦电路(4号线) 121.532044,31.222246
12 世纪大道 121.527444,31.228561
13 浦东大道 121.51929,31.239423
14 杨树浦路 121.51723,31.251898
15 大连路 121.51354,31.257474
16 临平路 121.500923,31.260189
17 海伦路 121.488735,31.258868
18 宝山路 121.47689,31.251237
19 上海火车站 121.455947,31.249476
20 中潭路 121.441184,31.254319
21 镇坪路 121.431829,31.246321
22 曹杨路 121.417667,31.237735
23 金沙江路 121.411315,31.230836
24 中山公园 121.415607,31.217551
25 延安西路 121.41698,31.20955
26 虹桥路 121.422216,31.195968
id: 5
name: 5号线
colour: #9253B2
fromTo: 莘庄 闵行开发区
totalStations: 11
1 莘庄 121.385379,31.111193
2 春申路 121.385937,31.098112
3 银都路 121.390143,31.089365
4 颛桥 121.401944,31.066945
5 北桥 121.409755,31.045033
6 剑川路 121.416578,31.026243
7 东川路 121.420012,31.018225
8 金平路 121.410313,31.011237
9 华宁路 121.395292,31.007265
10 文井路 121.38083,31.003366
11 闵行开发区 121.369715,31.000423
id: 6
name: 6号线
colour: #D7006C
fromTo: 港城路 东方体育中心
totalStations: 28
1 港城路 121.574752,31.353005
2 外高桥保税区北 121.586768,31.347764
3 航津路 121.593892,31.33532
4 外高桥保税区南 121.601874,31.321427
5 洲海路 121.589386,31.312261
6 五洲大道 121.589129,31.302618
7 东靖路 121.588528,31.290736
8 巨峰路 121.588399,31.280651
9 五莲路 121.588013,31.271775
10 博兴路 121.586768,31.263154
11 金桥路 121.581533,31.256955
12 云山路 121.572778,31.250057
13 德平路 121.564324,31.245324
14 北洋泾路 121.551921,31.238867
15 民生路 121.543638,31.235454
16 源深体育中心 121.534798,31.232775
17 世纪大道 121.527373,31.228298
18 浦电路(6号线) 121.529104,31.22008
19 蓝村路 121.527846,31.211526
20 上海儿童医学中心 121.523297,31.203194
21 临沂新村 121.516516,31.193356
22 高科西路 121.509778,31.185793
23 东明路 121.51098,31.172465
24 高青路 121.515658,31.159466
25 华夏西路 121.514327,31.14977
26 上南路 121.50613,31.148779
27 灵岩南路 121.495316,31.148558
28 东方体育中心 121.480209,31.153223
id: 7
name: 7号线
colour: #FF7F00
fromTo: 花木路 美兰湖
totalStations: 33
1 花木路 121.562754,31.211212
2 龙阳路 121.557304,31.20321
3 芳华路 121.550094,31.193005
4 锦绣路 121.53988,31.187278
5 杨高南路 121.525074,31.187278
6 高科西路 121.509711,31.185846
7 云台路 121.500527,31.181991
8 耀华路 121.494054,31.182001
9 长清路 121.486117,31.174611
10 后滩 121.473748,31.171967
11 龙华中路 121.456968,31.183864
12 东安路 121.45465,31.190399
13 肇嘉浜路 121.450273,31.199393
14 常熟路 121.449028,31.213121
15 静安寺 121.44847,31.222736
16 昌平路 121.442806,31.233305
17 长寿路 121.4383,31.240497
18 镇坪路 121.431776,31.246258
19 岚皋路 121.422035,31.256164
20 新村路 121.422721,31.263684
21 大华三路 121.423022,31.273955
22 行知路 121.421348,31.284885
23 大场镇 121.416541,31.293026
24 场中路 121.413537,31.303404
25 上大路 121.408559,31.314807
26 南陈路 121.398817,31.321296
27 上海大学 121.389076,31.320416
28 祁华路 121.373626,31.322066
29 顾村公园 121.373025,31.344463
30 刘行 121.362425,31.3574
31 潘广路 121.355988,31.364107
32 罗南新村 121.35749,31.388838
33 美兰湖 121.350237,31.401623
id: 8
name: 8号线
colour: #0000FF
fromTo: 沈杜公路 市光路
totalStations: 30
1 沈杜公路 121.512272,31.061427
2 联航路 121.510737,31.07297
3 江月路 121.508076,31.084143
4 浦江镇 121.505844,31.096345
5 芦恒路 121.497862,31.119126
6 凌兆新村 121.489451,31.14102
7 东方体育中心 121.480181,31.152847
8 杨思 121.493399,31.16078
9 成山路 121.496146,31.170474
10 耀华路 121.494515,31.178038
11 中华艺术宫 121.493571,31.184941
12 西藏南路 121.489537,31.20146
13 陆家浜路 121.486447,31.211151
14 老西门 121.483271,31.218638
15 大世界 121.479409,31.227006
16 人民广场 121.474774,31.232437
17 曲阜路 121.470654,31.241977
18 中兴路 121.469281,31.252911
19 西藏北路 121.469023,31.263183
20 虹口足球场 121.47855,31.271693
21 曲阳路 121.490996,31.276168
22 四平路 121.501467,31.274847
23 鞍山新村 121.509878,31.27338
24 江浦路 121.518118,31.27448
25 黄兴路 121.528504,31.278442
26 延吉中路 121.534684,31.288344
27 黄兴公园 121.53331,31.295239
28 翔殷路 121.532109,31.304699
29 嫩江路 121.531508,31.314526
30 市光路 121.531765,31.322445
id: 9
name: 9号线
colour: #7ac8ee
fromTo: 杨高中路 松江南站
totalStations: 26
1 杨高中路 121.548664,31.22751
2 世纪大道 121.527221,31.228764
3 商城路 121.516428,31.23014
4 小南门 121.498446,31.216837
5 陆家浜路 121.486215,31.21179
6 马当路 121.477182,31.209514
7 打浦桥 121.468792,31.206211
8 嘉善路 121.460659,31.202614
9 肇嘉浜路 121.450317,31.199218
10 徐家汇 121.436884,31.195199
11 宜山路 121.427314,31.184387
12 桂林路 121.417916,31.174767
13 漕河泾开发区 121.397853,31.170508
14 合川路 121.384828,31.166469
15 星中路 121.368971,31.157986
16 七宝 121.34923,31.15525
17 中春路 121.337642,31.149373
18 九亭 121.319296,31.137252
19 泗泾 121.260288,31.117562
20 佘山 121.229732,31.103599
21 洞泾 121.23059,31.084269
22 松江大学城 121.231706,31.053539
23 松江新城 121.230676,31.0303
24 松江体育中心 121.230333,31.015884
25 醉白池 121.229361,31.001125
26 松江南站 121.229903,30.982482
id: 10
name: 10号线
colour: #C7AFD3
fromTo: 新江湾城 虹桥火车站
totalStations: 28
1 新江湾城 121.506951,31.328496
2 殷高东路 121.506779,31.321714
3 三门路 121.508453,31.313245
4 江湾体育场 121.514247,31.302648
5 五角场 121.514805,31.297955
6 国权路 121.510084,31.289373
7 同济大学 121.506393,31.282075
8 四平路 121.501501,31.27474
9 邮电新村 121.49442,31.268247
10 海伦路 121.488583,31.259186
11 四川北路 121.484163,31.251886
12 天潼路 121.482489,31.243814
13 南京东路 121.484592,31.238163
14 豫园 121.487296,31.227705
15 老西门 121.48382,31.219081
16 新天地 121.475365,31.216181
17 陕西南路 121.458542,31.215007
18 上海图书馆 121.444338,31.207923
19 交通大学 121.435282,31.202013
20 虹桥路 121.422622,31.19625
21 宋园路 121.411936,31.19647
22 伊犁路 121.403868,31.19871
23 水城路 121.392195,31.19926
24 龙溪路 121.38005,31.194231
25 上海动物园 121.367905,31.190119
26 虹桥1号航站楼 121.347263,31.191363
27 虹桥2号航站楼 121.326385,31.194226
28 虹桥火车站 121.319025,31.193919
id: 11
name: 10号线
colour: #C7AFD3
fromTo: 新江湾城 航中路
totalStations: 27
1 新江湾城 121.506951,31.328496
2 殷高东路 121.506779,31.321714
3 三门路 121.508453,31.313245
4 江湾体育场 121.514247,31.302648
5 五角场 121.514805,31.297955
6 国权路 121.510084,31.289373
7 同济大学 121.506393,31.282075
8 四平路 121.501501,31.27474
9 邮电新村 121.49442,31.268247
10 海伦路 121.488583,31.259186
11 四川北路 121.484163,31.251886
12 天潼路 121.482489,31.243814
13 南京东路 121.484592,31.238163
14 豫园 121.487296,31.227705
15 老西门 121.48382,31.219081
16 新天地 121.475365,31.216181
17 陕西南路 121.458542,31.215007
18 上海图书馆 121.444338,31.207923
19 交通大学 121.435282,31.202013
20 虹桥路 121.422622,31.19625
21 宋园路 121.411936,31.19647
22 伊犁路 121.403868,31.19871
23 水城路 121.392195,31.19926
24 龙溪路 121.38005,31.194231
25 龙柏新村 121.370266,31.176994
26 紫藤路 121.364472,31.169687
27 航中路 121.355159,31.165354
id: 12
name: 11号线
colour: #841C21
fromTo: 迪士尼 嘉定北
totalStations: 31
1 迪士尼 121.668162,31.141355
2 康新公路 121.616857,31.1305
3 秀沿路 121.598146,31.137994
4 罗山路 121.592824,31.153053
5 御桥 121.570766,31.157974
6 浦三路 121.539266,31.150629
7 三林东 121.522999,31.146459
8 三林 121.511628,31.143063
9 东方体育中心 121.480214,31.153127
10 龙耀路 121.459722,31.159866
11 云锦路 121.458435,31.166255
12 龙华 121.453113,31.172498
13 上海游泳馆 121.441011,31.178593
14 徐家汇 121.435947,31.193719
15 交通大学 121.435089,31.202089
16 江苏路 121.430711,31.220661
17 隆德路 121.423244,31.230349
18 曹杨路 121.417493,31.237541
19 枫桥路 121.411142,31.241724
20 真如 121.406936,31.250677
21 上海西站 121.402816,31.26249
22 李子园 121.390199,31.269019
23 祁连山路 121.376037,31.271514
24 武威路 121.364708,31.276429
25 桃浦新村 121.349773,31.28127
26 南翔 121.322393,31.2966
27 马陆 121.277074,31.319479
28 嘉定新城 121.254158,31.329964
29 白银路 121.245489,31.344919
30 嘉定西 121.227378,31.376874
31 嘉定北 121.237507,31.391529
id: 13
name: 11号线
colour: #841C21
fromTo: 迪士尼 花桥
totalStations: 35
1 迪士尼 121.668162,31.141355
2 康新公路 121.616857,31.1305
3 秀沿路 121.598146,31.137994
4 罗山路 121.592824,31.153053
5 御桥 121.570766,31.157974
6 浦三路 121.539266,31.150629
7 三林东 121.522999,31.146459
8 三林 121.511628,31.143063
9 东方体育中心 121.480214,31.153127
10 龙耀路 121.459722,31.159866
11 云锦路 121.458435,31.166255
12 龙华 121.453113,31.172498
13 上海游泳馆 121.441011,31.178593
14 徐家汇 121.435947,31.193719
15 交通大学 121.435089,31.202089
16 江苏路 121.430711,31.220661
17 隆德路 121.423244,31.230349
18 曹杨路 121.417493,31.237541
19 枫桥路 121.411142,31.241724
20 真如 121.406936,31.250677
21 上海西站 121.402816,31.26249
22 李子园 121.390199,31.269019
23 祁连山路 121.376037,31.271514
24 武威路 121.364708,31.276429
25 桃浦新村 121.349773,31.28127
26 南翔 121.322393,31.2966
27 马陆 121.277074,31.319479
28 嘉定新城 121.254158,31.329964
29 上海赛车场 121.225919,31.33198
30 昌吉东路 121.20017,31.293739
31 上海汽车城 121.180472,31.285524
32 安亭 121.161976,31.288458
33 兆丰路 121.15026,31.289082
34 光明路 121.117043,31.29605
35 花桥 121.104211,31.298727
id: 14
name: 12号线
colour: #057B69
fromTo: 七莘路 金海路
totalStations: 32
1 七莘路 121.362464,31.131638
2 虹莘路 121.380488,31.137442
3 顾戴路 121.391732,31.140748
4 东兰路 121.39199,31.155659
5 虹梅路 121.397258,31.16025
6 虹漕路 121.410561,31.164014
7 桂林公园 121.419509,31.16664
8 漕宝路 121.432684,31.168145
9 龙漕路 121.444443,31.169357
10 龙华 121.452683,31.175012
11 龙华中路 121.456931,31.184778
12 大木桥路 121.463369,31.193883
13 嘉善路 121.460751,31.20273
14 陕西南路 121.459388,31.216132
15 南京西路 121.459292,31.227577
16 汉中路 121.458519,31.241668
17 曲阜路 121.471437,31.242292
18 天潼路 121.482466,31.24376
19 国际客运中心 121.497787,31.250034
20 提篮桥 121.50667,31.253299
21 大连路 121.513108,31.257775
22 江浦公园 121.523622,31.264561
23 宁国路 121.532248,31.26856
24 隆昌路 121.54465,31.275199
25 爱国路 121.552761,31.2796
26 复兴岛 121.561216,31.280627
27 东陆路 121.578983,31.282241
28 巨峰路 121.589669,31.28004
29 杨高北路 121.602886,31.279894
30 金京路 121.615718,31.27949
31 申江路 121.626705,31.280114
32 金海路 121.638635,31.263131
id: 15
name: 13号线
colour: #E77DAD
fromTo: 金运路 世博大道
totalStations: 19
1 金运路 121.319308,31.240986
2 金沙江西路 121.335144,31.240913
3 丰庄 121.354928,31.242637
4 祁连山南路 121.367202,31.23772
5 真北路 121.382093,31.232069
6 大渡河路 121.394195,31.231849
7 金沙江路 121.411576,31.231042
8 隆德路 121.423163,31.230235
9 武宁路 121.430158,31.234088
10 长寿路 121.438441,31.240913
11 江宁路 121.444621,31.244178
12 汉中路 121.458654,31.241646
13 自然博物馆 121.462259,31.236326
14 南京西路 121.462388,31.228546
15 淮海中路 121.464405,31.220326
16 新天地 121.475219,31.216472
17 马当路 121.476893,31.209609
18 世博会博物馆 121.4817,31.197606
19 世博大道 121.484275,31.182811
id: 16
name: 16号线
colour: #89CFBD
fromTo: 龙阳路 滴水湖
totalStations: 13
1 龙阳路 121.557634,31.203575
2 华夏中路 121.583109,31.175759
3 罗山路 121.593254,31.15342
4 周浦东 121.606643,31.11022
5 鹤沙航城 121.611536,31.077146
6 航头东 121.617286,31.054795
7 新场 121.648615,31.045383
8 野生动物园 121.698825,31.049795
9 惠南 121.761482,31.053472
10 惠南东 121.793325,31.026262
11 书院 121.849973,30.959086
12 临港大道 121.911085,30.923382
13 滴水湖 121.929109,30.907256
================================================
FILE: SubwayTransferSystem/data/subwayLine.txt
================================================
id: 1
name: 1号线
colour: #E70012
from: 富锦路
to: 莘庄
totalStation: 28
2584702105 富锦路 31.3933626 121.4200409
3800583782 友谊西路 31.3822507 121.4234632
3800583780 宝安公路 31.3706177 121.4264168
3800583781 共富新村 31.3561191 121.4294836
3800583785 呼兰路 31.3407871 121.4333835
4559664372 通河新村 31.3324328 121.4370701
4559664374 共康路 31.3216925 121.4419944
4559664009 彭浦新村 31.3074959 121.4439
4559664016 汶水路 31.2944979 121.4455635
4559664017 上海马戏城 31.2811737 121.4475097
4559664024 延长路 31.2732291 121.4509837
4559664491 中山北路 31.2614875 121.4544335
4559578257 上海火车站 31.2491107 121.4512065
4559664399 汉中路 31.2437538 121.4537124
4559664404 新闸路 31.2405396 121.4636428
3800386157 人民广场 31.2341757 121.4712404
4559578270 黄陂南路 31.2249557 121.4693343
4559578275 陕西南路 31.2189248 121.4552521
4559664568 常熟路 31.2151926 121.446465
4559664576 衡山路 31.2077094 121.4428948
4559578285 徐家汇 31.1950844 121.4338794
4559664579 上海体育馆 31.1838659 121.4317243
4559664585 漕宝路 31.1702742 121.4303171
4559665792 上海南站 31.1565785 121.4254997
471013199 锦江乐园 31.1440768 121.4095039
471012844 莲花路 31.1328416 121.3982765
471012636 外环路 31.1228305 121.3883431
470626733 莘庄 31.1123828 121.3802874
id: 2
name: 2号线
colour: #008000
from: 浦东国际机场
to: 徐泾东
totalStation: 29
3800386162 浦东国际机场 31.1539931 121.8013344
3800385625 海天三路 31.1711359 121.7922919
3800386194 远东大道 31.2014449 121.7503144
605037023 凌空路 31.1947136 121.7188506
605032163 川沙 31.1888308 121.6938288
605037513 华夏东路 31.1988574 121.6767066
605027658 创新中路 31.2155887 121.6699061
605027433 唐镇 31.2162236 121.6517707
605025081 广兰路 31.2129523 121.6163231
605024325 金科路 31.2064028 121.597836
470637744 张江高科 31.2039019 121.5834328
3800385648 龙阳路 31.2053095 121.552296
471016943 上海科技馆 31.2218914 121.5386617
3800385608 世纪大道 31.2307149 121.5229152
3800385616 东昌路 31.2352959 121.5112916
3800385652 陆家嘴 31.2401812 121.4981403
468916502 南京东路 31.2391219 121.4792304
469787957 人民广场 31.2354745 121.4705726
471088265 南京西路 31.2318255 121.4560232
4241260093 静安寺 31.2252923 121.4421389
622193942 江苏路 31.2213609 121.4265267
4520492425 中山公园 31.2200642 121.4115608
471088787 娄山关路 31.2129936 121.3991469
4520492882 威宁路 31.2166295 121.3831768
471091952 北新泾 31.218802 121.36812
471092256 淞虹路 31.2199749 121.3558076
605019372 虹桥2号航站楼 31.1962684 121.3225012
3800385631 虹桥二号航站楼 31.1965675 121.3226302
4460193672 虹桥火车站 31.196131 121.3156124
id: 3
name: 3号线
colour: #FFD100
from: 江杨北路
to: 上海南站
totalStation: 29
4569868066 江杨北路 31.4095962 121.435939
4569868069 铁力路 31.410105 121.4576264
1130521366 友谊路 31.4053452 121.4715994
4569868293 宝杨路 31.3966293 121.4753041
4569868318 水产路 31.3827275 121.484011
4569868398 淞滨路 31.3724622 121.4884743
4084890971 张华浜 31.3594153 121.4944348
4569813684 淞发路 31.3466275 121.495606
4569814489 长江南路 31.3335208 121.4866463
4569814490 殷高西路 31.3213309 121.4804198
4569814492 江湾镇 31.3068183 121.4805201
4569798797 大柏树 31.2907322 121.4785908
1130808922 赤峰路 31.2824973 121.4778472
4569798799 虹口足球场 31.2726034 121.4747671
4569795759 东宝兴路 31.2612062 121.4757568
4569795762 宝山路 31.2530993 121.4711217
1129387315 上海火车站 31.2520583 121.4523857
4569795765 中潭路 31.2563362 121.4356266
1129239840 镇坪路 31.2478102 121.4245142
4569783541 曹杨路 31.2406868 121.412465
4569783543 金沙江路 31.2334443 121.4083746
3800386197 中山公园 31.2191136 121.4113723
4569783546 延安西路 31.2107553 121.4123178
4569783551 虹桥路 31.1986765 121.4163853
4569783552 宜山路 31.1879465 121.4229946
4569783554 漕溪路 31.1781746 121.4344163
4569783556 龙漕路 31.1706912 121.4399801
4569783559 石龙路 31.1596273 121.4379161
3279344919 上海南站 31.1549574 121.4259971
id: 4
name: 4号线
colour: #471E86
from: null
to: null
totalStation: 18
266073071 海伦路 31.2609506 121.4853185
266072852 临平路 31.2629428 121.4964404
267197155 大连路 31.2602574 121.5082518
472140647 杨树浦路 31.2544208 121.5123604
267197152 浦东大道 31.2419442 121.5150029
267197150 世纪大道 31.2309778 121.5227543
472137933 浦电路 31.2243582 121.527867
472140982 蓝村路 31.2139796 121.5238557
472137910 塘桥 31.2116896 121.513974
471985357 宜山路 31.1886631 121.4229398
301639413 西藏南路 31.2036493 121.4851416
485353650 鲁班路 31.2011258 121.4706402
471986560 大木桥路 31.1960861 121.4591518
471986555 上海体育场 31.1874075 121.4391017
471986612 南浦大桥 31.2104442 121.4950777
471986551 上海体育馆 31.1845999 121.432432
804474524 虹桥路 31.1989568 121.4164767
4571430311 东安路 31.1925856 121.4501895
id: 5
name: 5号线
colour: #9253B2
from: 闵行开发区
to: 莘庄
totalStation: 11
4563678318 闵行开发区 31.002676 121.3654379
4563677253 文井路 31.0056477 121.3765305
4563678309 华宁路 31.0094993 121.3909794
4563678307 金平路 31.0132667 121.405889
4563678304 东川路 31.0205267 121.4151396
4563678301 剑川路 31.0287732 121.4118212
4563677262 北桥 31.0473809 121.405322
4563677260 颛桥 31.0692574 121.397115
4563677258 银都路 31.091592 121.3854682
4563677256 春申路 31.1004712 121.3809929
4559664168 莘庄 31.1136576 121.3811042
id: 6
name: 6号线
colour: #D7006C
from: 东方体育中心
to: 港城路
totalStation: 19
478774137 上南路 31.1511766 121.5019956
478774109 灵岩南路 31.1507549 121.4908101
478773874 东方体育中心 31.1554325 121.4758425
478774706 东明路 31.174803 121.5066043
478774805 高科西路 31.187563 121.5056521
472139673 临沂新村 31.195787 121.5131727
472139055 世纪大道 31.2307121 121.5227173
602749130 博兴路 31.2661344 121.5826719
472139052 浦电路 31.2226916 121.5244594
472139047 蓝村路 31.2141328 121.5236963
478772242 华夏西路 31.151974 121.51032
621912244 高青路 31.1614994 121.5113226
472139046 上海儿童医学中心 31.2061387 121.519567
472139059 源深体育中心 31.2350191 121.5299034
621913770 民生路 31.2382859 121.5402749
621914110 北洋泾路 31.2411512 121.5478075
621914221 德平路 31.2480485 121.5608567
621914289 云山路 31.2520996 121.5677906
621914488 金桥路 31.2591646 121.5774818
id: 7
name: 7号线
colour: #FF7F00
from: 美兰湖
to: 花木路
totalStation: 33
1221258068 美兰湖 31.4032271 121.3458577
4571267424 罗南新村 31.3899534 121.3529669
4571267309 潘广路 31.3654514 121.3518324
4571267089 刘行 31.3592752 121.3582022
4571267212 顾村公园 31.3456433 121.3689853
4571267320 祁华路 31.3235545 121.3690565
4571266995 上海大学 31.3224712 121.3846558
4571267332 南陈路 31.3235666 121.3942271
4571266994 上大路 31.316375 121.4040757
4571266991 场中路 31.3050495 121.4086273
4571267239 大场镇 31.2949031 121.4117566
4571267345 行知路 31.2852481 121.417543
4571266894 大华三路 31.2751359 121.418498
4571267241 新村路 31.2650693 121.4178346
4571266891 岚皋路 31.2572552 121.4172532
4571267359 镇坪路 31.2483656 121.427186
4571267253 长寿路 31.2418081 121.433661
4571267257 昌平路 31.2350088 121.4384725
4571267366 静安寺 31.2252098 121.4438124
4571267369 常熟路 31.2147604 121.4447734
4571267265 肇嘉浜路 31.2010939 121.445902
4571267270 东安路 31.1925436 121.4503969
4571267377 龙华中路 31.185916 121.452855
4571267272 后滩 31.1739139 121.4690491
4571267279 长清路 31.1771537 121.482409
4571267385 耀华路 31.1806489 121.4906856
4571267388 云台路 31.1847811 121.4967173
4571267393 高科西路 31.1877669 121.506069
4571267401 杨高南路 31.1895931 121.5207941
4571267283 锦绣路 31.1897479 121.5364372
4571266931 芳华路 31.1957033 121.5455599
4571267595 龙阳路 31.2056528 121.553972
4571267423 花木路 31.2137836 121.558496
id: 8
name: 8号线
colour: #0000FF
from: null
to: null
totalStation: 24
301638499 江浦路 31.2769665 121.5142018
301638468 嫩江路 31.3167471 121.5276856
301638476 黄兴公园 31.2978687 121.5288453
301638467 市光路 31.3247945 121.5276595
301638471 翔殷路 31.3071134 121.5276104
301638494 黄兴路 31.2803115 121.5230166
301638504 鞍山新村 31.2749584 121.5048124
301638544 曲阜路 31.2441977 121.4669863
301638516 曲阳路 31.2785073 121.485791
301638539 中兴路 31.256373 121.4640767
301638561 大世界 31.2291572 121.474956
472368139 老西门 31.220833 121.478477
301639398 陆家浜路 31.2139173 121.4814746
301639413 西藏南路 31.2036493 121.4851416
700176212 中华艺术宫 31.1869806 121.4892799
301638523 虹口足球场 31.2718466 121.4747091
301638480 延吉中路 31.290732 121.530645
301638528 西藏北路 31.2655487 121.4645981
478773874 东方体育中心 31.1554325 121.4758425
478768049 成山路 31.1727625 121.4918051
621906397 芦恒路 31.1202197 121.4938452
478768611 凌兆新村 31.1430995 121.4848026
621907265 杨思 31.1630048 121.4890354
1879882248 四平路 31.2767948 121.4970345
id: 9
name: 9号线
colour: #7ac8ee
from: null
to: null
totalStation: 29
849493057 七宝 31.1572981 121.3442488
621901822 松江体育中心 31.0179935 121.2262839
621901825 醉白池 31.0028368 121.224526
608703668 徐家汇 31.1974667 121.4323716
600504933 嘉善路 31.2046098 121.4563758
608700745 打浦桥 31.2082702 121.463967
471988294 陆家浜路 31.2137878 121.4811531
608700783 小南门 31.2190057 121.4940871
608700785 商城路 31.2325013 121.5120506
485350360 肇嘉浜路 31.2013653 121.4458926
471988309 世纪大道 31.2306159 121.522599
472226807 桂林路 31.1764027 121.4117145
472226771 宜山路 31.1861681 121.4227546
471988271 漕河泾开发区 31.1726509 121.392777
472225791 合川路 31.168979 121.3803614
472225785 星中路 31.1604595 121.3640536
472226277 中春路 31.1518149 121.3342241
472226244 九亭 31.1393075 121.314195
472225762 松江新城 31.0322106 121.2262996
471988293 马当路 31.2112188 121.4718956
4250052747 芳甸路(在建) 31.2343776 121.5544342
4250052755 曹路(在建) 31.273384 121.6784979
4250052754 民雷路(在建) 31.2704328 121.6638097
4250052753 顾唐路(在建) 31.2682411 121.6522792
4250052752 金海路(在建) 31.266115 121.6349293
4250052751 金吉路(在建) 31.2666375 121.6247147
4250052750 金桥(在建) 31.2630973 121.6072301
4250052749 台儿庄路(在建) 31.2544251 121.5931599
4250052748 蓝天路(在建) 31.2431953 121.5736522
id: 10
name: 10号线
colour: #C7AFD3
from: null
to: null
totalStation: 30
1865258670 四川北路 31.2537048 121.479494
810762677 五角场 31.2997294 121.5100904
1879882295 四平路 31.2768364 121.4970111
472368078 南京东路 31.2394134 121.4805311
1500382256 海伦路 31.2611688 121.4842056
804465143 陕西南路 31.2168228 121.4540175
469774464 同济大学 31.2844081 121.5020918
468748469 国权路 31.2912473 121.5056173
468749842 殷高东路 31.3237994 121.5024607
1871683943 三门路 31.3151646 121.5037905
468747600 新江湾城 31.330778 121.5023788
469778116 邮电新村 31.270398 121.489829
1865258671 天潼路 31.2457632 121.4778324
472368139 老西门 31.220833 121.478477
601661256 新天地 31.2180291 121.4698051
804465180 上海图书馆 31.2094457 121.4388249
804474514 交通大学 31.2041254 121.4306649
804474531 宋园路 31.1983218 121.4078985
804474544 伊犁路 31.2010859 121.3980124
804474558 水城路 31.2012235 121.3876161
804474570 龙溪路 31.1969928 121.3767693
804485337 航中路 31.1671342 121.349164
804485311 龙柏新村 31.1792881 121.3661584
804485332 紫藤路 31.171357 121.3589487
804485478 上海动物园 31.1920777 121.3634113
810762676 江湾体育场 31.3051127 121.509616
845389048 豫园 31.2299247 121.4829009
804474524 虹桥路 31.1989568 121.4164767
1542037120 虹桥1号航站楼 31.1935634 121.3426651
4460193672 虹桥火车站 31.196131 121.3156124
id: 11
name: 11号线
colour: #841C21
from: 迪士尼
to: 嘉定北
totalStation: 26
3800185678 罗山路 31.1560621 121.5888829
3800185710 御桥 31.1605773 121.5674244
3800185686 浦三路 31.1532165 121.5350476
3800185056 三林东 31.148666 121.5188667
3800185690 三林 31.1454212 121.5079185
3800185684 东方体育中心 31.1554584 121.4758512
3800185676 龙耀路 31.1615123 121.4552046
3800185708 云锦路 31.1695044 121.4538975
3800185674 龙华 31.1748721 121.448689
3800185696 上海游泳馆 31.1812988 121.4367786
3800185704 徐家汇 31.1963151 121.431385
3800185668 江苏路 31.22155 121.4262764
3800185672 隆德路 31.2323643 121.4190281
3800185052 曹杨路 31.2403213 121.4122348
3800185658 枫桥路 31.2443645 121.4057363
3800185714 真如 31.2527162 121.4026775
3800185698 上海西站 31.2658397 121.3960838
3800185670 李子园 31.270531 121.3861026
3800185688 祁连山路 31.273425 121.3725609
3800185702 武威路 31.2817867 121.357912
3800185700 桃浦新村 31.2833376 121.3459121
3800185682 南翔 31.2990636 121.3179658
3800185679 马陆 31.3214015 121.2717056
3800185666 嘉定新城 31.3326357 121.2495582
3800185050 白银路 31.3477822 121.2405868
3279344926 嘉定北 31.3938876 121.2336925
id: 11
name: 11号线
colour: #841C21
from: 迪士尼
to: 花桥
totalStation: 31
3800185678 罗山路 31.1560621 121.5888829
3800185710 御桥 31.1605773 121.5674244
3800185686 浦三路 31.1532165 121.5350476
3800185056 三林东 31.148666 121.5188667
3800185690 三林 31.1454212 121.5079185
3800185684 东方体育中心 31.1554584 121.4758512
3800185676 龙耀路 31.1615123 121.4552046
3800185708 云锦路 31.1695044 121.4538975
3800185674 龙华 31.1748721 121.448689
3800185696 上海游泳馆 31.1812988 121.4367786
3800185704 徐家汇 31.1963151 121.431385
3800185668 江苏路 31.22155 121.4262764
3800185672 隆德路 31.2323643 121.4190281
3800185052 曹杨路 31.2403213 121.4122348
3800185658 枫桥路 31.2443645 121.4057363
3800185714 真如 31.2527162 121.4026775
3800185698 上海西站 31.2658397 121.3960838
3800185670 李子园 31.270531 121.3861026
3800185688 祁连山路 31.273425 121.3725609
3800185702 武威路 31.2817867 121.357912
3800185700 桃浦新村 31.2833376 121.3459121
3800185682 南翔 31.2990636 121.3179658
3800185679 马陆 31.3214015 121.2717056
3800185666 嘉定新城 31.3326357 121.2495582
3800185694 上海赛车场 31.3339874 121.220933
3800185053 昌吉东路 31.2951195 121.1953078
3800185692 上海汽车城 31.2874687 121.1755689
3800185048 安亭 31.2904336 121.1567748
3800185712 兆丰路 31.2911068 121.1449472
3800185660 光明路 31.2982893 121.1119096
3800185663 花桥 31.3006751 121.0989437
id: 12
name: 12号线
colour: #057B69
from: null
to: null
totalStation: 32
2625435872 金海路 31.2652003 121.6343843
2625435876 申江路 31.2822916 121.6226109
2625436347 金京路 31.2818459 121.6107893
2625436356 杨高北路 31.2822811 121.598766
2625436354 巨峰路 31.2822848 121.5851419
2625436368 东陆路 31.2846637 121.5746455
2625436358 复兴岛 31.2830035 121.5569651
2625436349 爱国路 31.2819559 121.5482851
2625436627 隆昌路 31.2776103 121.5407282
2625436622 宁国路 31.2706622 121.5283174
2625436620 江浦公园 31.2665283 121.5193398
2625436615 大连路 31.2599715 121.5085675
2625439389 提篮桥 31.2554973 121.5023731
2625439387 国际客运中心 31.2521208 121.4939755
2625439374 天潼路 31.2457595 121.477971
2863456545 曲阜路 31.2443907 121.4672583
4072082530 汉中路 31.2425951 121.4544054
2863452032 陕西南路 31.2177902 121.4547198
2863452046 嘉善路 31.2047633 121.4563038
2863458944 大木桥路 31.196037 121.4591932
2863458946 龙华中路 31.1863352 121.4518955
2863458960 龙华 31.1766437 121.4482038
2863458947 龙漕路 31.172043 121.4389553
2863458958 漕宝路 31.1704085 121.4291078
4072082529 桂林公园 31.1689728 121.4149939
4072082531 虹漕路 31.1662241 121.4061304
4072082528 顾戴路 31.1428208 121.3875997
4072082533 虹莘路 31.1395514 121.3758293
4072082534 七莘路 31.1326471 121.3564792
4250719423 南京西路 31.229438 121.4548158
4127292550 东兰路 31.1577116 121.3871732
4127292551 虹梅路 31.1622153 121.3927025
id: 13
name: 13号线
colour: #E77DAD
from: null
to: null
totalStation: 19
1914416025 金运路 31.2428887 121.31546
1914416023 金沙江西路 31.2430886 121.3306597
1914416019 丰庄 31.244304 121.3507184
1914416022 祁连山南路 31.2395103 121.3627051
1914416021 真北路 31.2340599 121.3775615
1914416020 大渡河路 31.2336576 121.3896152
1914416024 金沙江路 31.2331479 121.4072204
622194085 隆德路 31.2323503 121.4190012
2356329719 武宁路 31.236348 121.4260607
485250315 长寿路 31.2425665 121.4335758
2356329715 江宁路 31.2461329 121.4398587
2356329714 汉中路 31.2425757 121.4543015
2356329717 自然博物馆 31.2382599 121.4578682
2356329718 南京西路 31.2304735 121.4579797
2356329716 淮海中路 31.2218636 121.4598571
601661256 新天地 31.2180291 121.4698051
471988293 马当路 31.2112188 121.4718956
485353633 世博会博物馆 31.1992464 121.4771259
485353627 世博大道 31.1849308 121.4795929
id: 16
name: 16号线
colour: #89CFBD
from: 滴水湖
to: 龙阳路
totalStation: 13
4562133848 滴水湖 30.9099027 121.9251442
2526592353 临港大道 30.9261249 121.9064328
2526598119 书院 30.9619234 121.8457585
4562133836 惠南东 31.0292623 121.789539
4274772979 惠南 31.0560195 121.7566897
4562133805 野生动物园 31.0525333 121.6941206
4562198893 新场 31.0477439 121.6439898
4562198783 航头东 31.0579029 121.6130944
4274772541 鹤沙航城 31.0806608 121.6069539
4274772511 周浦东 31.1129852 121.6026506
4562193619 罗山路 31.1560801 121.5889343
4562193606 华夏中路 31.1786138 121.5788337
3800385644 龙阳路 31.2042355 121.5535481
id: 17
name: 17号线
colour: #0000aa
from: null
to: null
totalStation: 13
4249995828 诸光路(在建) 31.1935855 121.2880817
4249995830 蟠龙路(在建) 31.1884461 121.2742009
4249995832 徐泾北城(在建) 31.1773644 121.2363272
4249995831 徐盈路(在建) 31.18014 121.2498205
4249995847 嘉松中路(在建) 31.166083 121.2203555
4249995888 汇金路(在建) 31.1632585 121.1454776
4249996945 淀山湖大道(在建) 31.1353735 121.0760618
4249997016 朱家角(在建) 31.1026547 121.0446271
4249997015 东方绿舟(在建) 31.1005345 121.0148919
4249996913 漕盈路(在建) 31.1623496 121.0919505
4249996891 青浦新城(在建) 31.1608076 121.1210939
4249995871 赵巷(在建) 31.163113 121.187692
4460193671 虹桥火车站 31.1962371 121.3156133
================================================
FILE: SubwayTransferSystem/graphics_view_zoom.cpp
================================================
#include "graphics_view_zoom.h"
#include <QMouseEvent>
#include <QApplication>
#include <QScrollBar>
#include <qmath.h>
Graphics_view_zoom::Graphics_view_zoom(QGraphicsView* view)
: QObject(view), _view(view)
{
_view->viewport()->installEventFilter(this);
_view->setMouseTracking(true);
_modifiers = Qt::ControlModifier;
_zoom_factor_base = 1.0015;
}
void Graphics_view_zoom::gentle_zoom(double factor) {
_view->scale(factor, factor);
_view->centerOn(target_scene_pos);
QPointF delta_viewport_pos = target_viewport_pos - QPointF(_view->viewport()->width() / 2.0,
_view->viewport()->height() / 2.0);
QPointF viewport_center = _view->mapFromScene(target_scene_pos) - delta_viewport_pos;
_view->centerOn(_view->mapToScene(viewport_center.toPoint()));
emit zoomed();
}
void Graphics_view_zoom::set_modifiers(Qt::KeyboardModifiers modifiers) {
_modifiers = modifiers;
}
void Graphics_view_zoom::set_zoom_factor_base(double value) {
_zoom_factor_base = value;
}
bool Graphics_view_zoom::eventFilter(QObject *object, QEvent *event) {
if (event->type() == QEvent::MouseMove) {
QMouseEvent* mouse_event = static_cast<QMouseEvent*>(event);
QPointF delta = target_viewport_pos - mouse_event->pos();
if (qAbs(delta.x()) > 5 || qAbs(delta.y()) > 5) {
target_viewport_pos = mouse_event->pos();
target_scene_pos = _view->mapToScene(mouse_event->pos());
}
} else if (event->type() == QEvent::Wheel) {
QWheelEvent* wheel_event = static_cast<QWheelEvent*>(event);
if (QApplication::keyboardModifiers() == _modifiers) {
if (wheel_event->orientation() == Qt::Vertical) {
double angle = wheel_event->angleDelta().y();
double factor = qPow(_zoom_factor_base, angle);
gentle_zoom(factor);
return true;
}
}
}
Q_UNUSED(object)
return false;
}
================================================
FILE: SubwayTransferSystem/graphics_view_zoom.h
================================================
#ifndef GRAPHICS_VIEW_ZOOM_H
#define GRAPHICS_VIEW_ZOOM_H
#include <QObject>
#include <QGraphicsView>
/*!
* This class adds ability to zoom QGraphicsView using mouse wheel. The point under cursor
* remains motionless while it's possible.
*
* Note that it becomes not possible when the scene's
* size is not large enough comparing to the viewport size. QGraphicsView centers the picture
* when it's smaller than the view. And QGraphicsView's scrolls boundaries don't allow to
* put any picture point at any viewport position.
*
* When the user starts scrolling, this class remembers original scene position and
* keeps it until scrolling is completed. It's better than getting original scene position at
* each scrolling step because that approach leads to position errors due to before-mentioned
* positioning restrictions.
*
* When zommed using scroll, this class emits zoomed() signal.
*
* Usage:
*
* new Graphics_view_zoom(view);
*
* The object will be deleted automatically when the view is deleted.
*
* You can set keyboard modifiers used for zooming using set_modified(). Zooming will be
* performed only on exact match of modifiers combination. The default modifier is Ctrl.
*
* You can change zoom velocity by calling set_zoom_factor_base().
* Zoom coefficient is calculated as zoom_factor_base^angle_delta
* (see QWheelEvent::angleDelta).
* The default zoom factor base is 1.0015.
*/
class Graphics_view_zoom : public QObject {
Q_OBJECT
public:
Graphics_view_zoom(QGraphicsView* view);
void gentle_zoom(double factor);
void set_modifiers(Qt::KeyboardModifiers modifiers);
void set_zoom_factor_base(double value);
private:
QGraphicsView* _view;
Qt::KeyboardModifiers _modifiers;
double _zoom_factor_base;
QPointF target_scene_pos, target_viewport_pos;
bool eventFilter(QObject* object, QEvent* event);
signals:
void zoomed();
};
#endif // GRAPHICS_VIEW_ZOOM_H
================================================
FILE: SubwayTransferSystem/html/helpAddByText.html
================================================
<h3>文本方式简易添加方法</h3>
<br>
<br>
点击 <img height=24 weight=24 src=":/icon/icon/text.png"> , 以文本方式快捷添加线路、站点、连接关系;
<br>
<p>
文本格式需要同样例文本格式,格式需规范,否则不能成功添加。
</p>
================================================
FILE: SubwayTransferSystem/html/helpAddConnection.html
================================================
<h3>新增站点连接方法</h3>
<br>
<br>
点击 <img height=24 weight=24 src=":/icon/icon/connect.png"> , 添加连接;
<br>
<p>
1.先添加新线路信息;
<br>
2.然后在工具【站点】中添加线路站点;
<br>
3.最后在工具【连接】中确定站点连接关系;
<br>
4.也可以用文本方式简单快捷添加,格式需规范。
</p>
================================================
FILE: SubwayTransferSystem/html/helpAddLine.html
================================================
<h3>新增线路方法</h3>
<br>
<br>
点击 <img height=24 weight=24 src=":/icon/icon/subway.png"> , 添加线路;
<br>
<p>
1.先添加新线路信息;
<br>
2.然后在工具【站点】中添加线路站点;
<br>
3.最后在工具【连接】中确定站点连接关系;
<br>
4.也可以用文本方式简单快捷添加,格式需规范。
</p>
================================================
FILE: SubwayTransferSystem/html/helpAddStation.html
================================================
<h3>新增站点方法</h3>
<br>
<br>
点击 <img height=24 weight=24 src=":/icon/icon/station.png"> , 添加站点;
<br>
<p>
1.先添加新线路信息;
<br>
2.然后在工具【站点】中添加线路站点;
<br>
3.最后在工具【连接】中确定站点连接关系;
<br>
4.也可以用文本方式简单快捷添加,格式需规范。
</p>
================================================
FILE: SubwayTransferSystem/html/helpTransfer.html
================================================
<h3>地铁换乘指南</h3>
<br>
<p>
视图右侧为换乘指南,选择相应线路站点即可换乘;
<br>
选择方式有;<strong>“最短时间”</strong>和;<strong>“最少换乘”</strong>;
<br>
<strong>“最短时间”</strong>换乘指南线路为依次乘坐的详细站点路线;
<br>
<strong>“最少换乘”</strong>换乘指南线路为换乘的关键站点;
<br><br>
换乘后,点击 <img height=24 weight=24 src=":/icon/icon/map.png"> , 可重新查看所有线路;
</p>
================================================
FILE: SubwayTransferSystem/html/helpWatch.html
================================================
<h3>查看地铁网络线路图</h3>
<br>
<p>
地铁线路图根据上海现有地铁站的地理<strong>经纬度</strong>数据显现出来;
<br>
每条线路有不同的颜色,重叠的线路为颜色叠加显示,效果为<strong>正片叠底</strong>,参见 <a href="http://www.cgspread.com/3551.html">叠加模式</a> ;
<br>
站点中心为白色为不可换乘站点,非白色为可换乘其它线路站点;
<br><br>
点击 <img height=24 weight=24 src=":/icon/icon/enlarge.png"> , 视图放大;
<br>
点击 <img height=24 weight=24 src=":/icon/icon/shrink.png"> , 视图缩小;
<br>
鼠标可直接缩放;
<br>
将鼠标悬停在站点,可查看站点详细信息;
<br>
将鼠标悬停在线路,可查看线路详细信息;
</p>
================================================
FILE: SubwayTransferSystem/line.h
================================================
#ifndef LINE_H
#define LINE_H
#include <QString>
#include <QColor>
#include <QPair>
#include <QSet>
#include <QVector>
//定义边类型
typedef QPair<int,int> Edge;
class SubwayGraph;
class QTextStream;
//线路类
class Line
{
protected:
int id; //线路ID
QString name; //线路名称
QColor color; //线路颜色
QVector <QString> fromTo; //线路起始站点
QSet<int> stationsSet; //线路站点集合
QSet<Edge> edges; //线路站点连接关系
public:
//构造函数
Line(){};
Line(QString lineName, QColor lineColor):name(lineName), color(lineColor)
{};
//声明友元
friend class SubwayGraph;
friend class QTextStream;
};
#endif // LINE_H
================================================
FILE: SubwayTransferSystem/main.cpp
================================================
#include "mainwindow.h"
#include <QApplication>
#include <QSplashScreen>
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPixmap pixmap(":/icon/icon/splash.png");
QSplashScreen splash(pixmap);//程序启动画面
for(qint64 i=5555555;i>0;i--)
splash.show();
MainWindow w;
w.show();
splash.finish(&w);
return a.exec();
}
================================================
FILE: SubwayTransferSystem/mainwindow.cpp
================================================
#include "ui_mainwindow.h"
#include "ui_managelines.h"
#include "mainwindow.h"
#include <QGraphicsItem>
#include <QMessageBox>
#include <QColorDialog>
#include <QTimer>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
myView = new Graphics_view_zoom(ui->graphicsView);
myView->set_modifiers(Qt::NoModifier);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);
scene=new QGraphicsScene;
scene->setSceneRect(-LINE_INFO_WIDTH,0,SCENE_WIDTH,SCENE_HEIGHT);
ui->graphicsView->setScene(scene);
ui->graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
initStatusBar();
manageLines=new ManageLines(this);
subwayGraph=new SubwayGraph;
appHelp=new AppHelp();
bool flag = subwayGraph->readFileData(":/data/data/outLine.txt");
if (!flag)
{
QMessageBox box;
box.setWindowTitle(tr("error information"));
box.setIcon(QMessageBox::Warning);
box.setText("读取数据错误!\n将无法展示内置线路!");
box.addButton(tr("确定"), QMessageBox::AcceptRole);
if (box.exec() == QMessageBox::Accepted)
{
box.close();
}
}
myConnect();
updateTranserQueryInfo();
on_actionLineMap_triggered();
}
MainWindow::~MainWindow()
{
delete ui;
delete myView;
delete scene;
delete subwayGraph;
delete manageLines;
delete appHelp;
}
//连接信号和槽函数
void MainWindow::myConnect()
{
connect(manageLines->ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabWidgetCurrentChanged(int)));
connect(manageLines->ui->pushButtonAddLine, SIGNAL(clicked()), this, SLOT(addLine()));
connect(manageLines->ui->pushButtonAddStation, SIGNAL(clicked()), this, SLOT(addStation()));
connect(manageLines->ui->pushButtonConnect, SIGNAL(clicked()), this, SLOT(addConnection()));
connect(manageLines->ui->pushButtonAddByText, SIGNAL(clicked()), this, SLOT(addByText()));
connect(ui->comboBoxStartLine, SIGNAL(currentIndexChanged(QString)),
this, SLOT(transferStartLineChanged(QString)));
connect(ui->comboBoxDstLine, SIGNAL(currentIndexChanged(QString)),
this, SLOT(transferDstLineChanged(QString)));
connect(ui->pushButtonTransfer, SIGNAL(clicked()), this, SLOT(transferQuery()));
QTimer *timer = new QTimer(this);//新建定时器
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));//关联定时器计满信号和相应的槽函数
timer->start(1000);//定时器开始计时,其中1000表示1000ms即1秒
}
//时间更新槽函数
void MainWindow::timerUpdate()
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
statusLabel2->setText(str);
}
//初始状态栏
void MainWindow::initStatusBar()
{
QStatusBar* bar = ui->statusBar;
statusLabel1 = new QLabel;
statusLabel1->setMinimumSize(200,15);
statusLabel1->setFrameShape(QFrame::Box);
statusLabel1->setFrameShadow(QFrame::Sunken);
statusLabel2 = new QLabel;
statusLabel2->setMinimumSize(200,15);
statusLabel2->setFrameShape(QFrame::Box);
statusLabel2->setFrameShadow(QFrame::Sunken);
statusLabel3 = new QLabel;
statusLabel3->setMinimumSize(200,15);
statusLabel3->setFrameShape(QFrame::Box);
statusLabel3->setFrameShadow(QFrame::Sunken);
bar->addWidget(statusLabel1);
bar->addWidget(statusLabel2);
bar->addWidget(statusLabel3);
statusLabel1->setText(tr("made by 1453381"));
statusLabel2->setText(tr("0000-00-00 00:00::00 星期 "));
statusLabel3->setText(tr("欢迎使用地铁换乘指南,详情帮助"));
}
//由线路表计算混合颜色
QColor MainWindow::getLinesColor(const QList<int>& linesList)
{
QColor color1=QColor(255,255,255);
QColor color2;
for (int i=0; i<linesList.size(); ++i)
{
color2=subwayGraph->getLineColor(linesList[i]);
color1.setRed(color1.red()*color2.red()/255);
color1.setGreen(color1.green()*color2.green()/255);
color1.setBlue(color1.blue()*color2.blue()/255);
}
return color1;
}
//获得线路表的名字集
QString MainWindow::getLinesName(const QList<int>& linesList)
{
QString str;
str+="\t";
for (int i=0; i<linesList.size(); ++i)
{
str+=" ";
str+=subwayGraph->getLineName(linesList[i]);
}
// qDebug()<<"tip="<<str<<"\n";
return str;
}
//将站点的经纬度地理坐标转为视图坐标
QPointF MainWindow::transferCoord(QPointF coord)
{
QPointF minCoord=subwayGraph->getMinCoord();
QPointF maxCoord=subwayGraph->getMaxCoord();
double x = (coord.x()-minCoord.x())/(maxCoord.x()-minCoord.x())*NET_WIDTH+MARGIN;
double y = (maxCoord.y()-coord.y())/(maxCoord.y()-minCoord.y())*NET_HEIGHT+MARGIN;
return QPointF(x,y);
}
//绘制网络图的边
void MainWindow::drawEdges(const QList<Edge>& edgesList)
{
for(int i=0; i<edgesList.size(); ++i)
{
int s1=edgesList[i].first;
int s2=edgesList[i].second;
QList<int> linesList=subwayGraph->getCommonLines(s1, s2);
QColor color=getLinesColor(linesList);
QString tip="途经: "+subwayGraph->getStationName(s1)+"--"+subwayGraph->getStationName(s2)+"\n线路:";
tip+=getLinesName(linesList);
QPointF s1Pos=transferCoord(subwayGraph->getStationCoord(s1));
QPointF s2Pos=transferCoord(subwayGraph->getStationCoord(s2));
QGraphicsLineItem* edgeItem=new QGraphicsLineItem;
edgeItem->setPen(QPen(color, EDGE_PEN_WIDTH));
edgeItem->setCursor(Qt::PointingHandCursor);
edgeItem->setToolTip(tip);
edgeItem->setPos(s1Pos);
edgeItem->setLine(0, 0, s2Pos.x()-s1Pos.x(), s2Pos.y()-s1Pos.y());
scene->addItem(edgeItem);
}
}
//绘制网络图的站点节点
void MainWindow::drawStations (const QList<int>& stationsList)
{
for (int i=0; i<stationsList.size(); ++i)
{
int s=stationsList[i];
QString name=subwayGraph->getStationName(s);
QList<int> linesList=subwayGraph->getStationLinesInfo(s);
QColor color=getLinesColor(linesList);
QPointF longiLati=subwayGraph->getStationCoord(s);
QPointF coord=transferCoord(longiLati);
QString tip="站名: "+name+"\n"+
"经度: "+QString::number(longiLati.x(),'f',7)+"\n"+
"纬度: "+QString::number(longiLati.y(),'f',7)+"\n"+
"线路:"+getLinesName(linesList);
QGraphicsEllipseItem* stationItem=new QGraphicsEllipseItem;
stationItem->setRect(-NODE_HALF_WIDTH, -NODE_HALF_WIDTH, NODE_HALF_WIDTH<<1, NODE_HALF_WIDTH<<1);
stationItem->setPos(coord);
stationItem->setPen(color);
stationItem->setCursor(Qt::PointingHandCursor);
stationItem->setToolTip(tip);
if(linesList.size()<=1)
{
stationItem->setBrush(QColor(QRgb(0xffffff)));
}
scene->addItem(stationItem);
QGraphicsTextItem* textItem=new QGraphicsTextItem;
textItem->setPlainText(name);
textItem->setFont(QFont("consolas",4,1));
textItem->setPos(coord.x(),coord.y()-NODE_HALF_WIDTH*2);
scene->addItem(textItem);
}
}
//更新换乘选择信息
void MainWindow::updateTranserQueryInfo()
{
statusLabel3->setText(tr("已更新数据"));
QComboBox* comboL1=ui->comboBoxStartLine;
QComboBox* comboL2=ui->comboBoxDstLine;
comboL1->clear();
comboL2->clear();
QList<QString> linesList=subwayGraph->getLinesNameList();
for(auto &a:linesList)
{
comboL1->addItem(a);
comboL2->addItem(a);
}
transferStartLineChanged(comboL1->itemText(0));
transferDstLineChanged(comboL2->itemText(0));
}
//换乘出发线路改变槽函数
void MainWindow::transferStartLineChanged(QString lineName)
{
QComboBox* comboS1=ui->comboBoxStartStation;
comboS1->clear();
int lineHash=subwayGraph->getLineHash(lineName);
if(lineHash==-1)
{
return ;
}
QList<QString> stationsList=subwayGraph->getLineStationsList(lineHash);
for(auto &a:stationsList)
{
comboS1->addItem(a);
}
}
//换乘目的线路改变槽函数
void MainWindow::transferDstLineChanged(QString lineName)
{
QComboBox* comboS2=ui->comboBoxDstStation;
comboS2->clear();
int lineHash=subwayGraph->getLineHash(lineName);
if(lineHash==-1)
{
return ;
}
QList<QString> stationsList=subwayGraph->getLineStationsList(lineHash);
for(auto &a:stationsList)
{
comboS2->addItem(a);
}
}
//换乘查询槽函数
void MainWindow::transferQuery()
{
int s1=subwayGraph->getStationHash(ui->comboBoxStartStation->currentText());
int s2=subwayGraph->getStationHash(ui->comboBoxDstStation->currentText());
int way=ui->radioButtonMinTime->isChecked()?1:2;
if(s1==-1||s2==-1)
{
QMessageBox box;
box.setWindowTitle(tr("换乘查询"));
box.setWindowIcon(QIcon(":/icon/icon/query.png"));
box.setIcon(QMessageBox::Warning);
box.setText(tr("请选择有站点的线路"));
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
}
else
{
QList<int> stationsList;
QList<Edge> edgesList;
bool flag=true;
if(way==1)
{
flag=subwayGraph->queryTransferMinTime(s1, s2, stationsList, edgesList);
}
else
{
flag=subwayGraph->queryTransferMinTransfer(s1, s2, stationsList, edgesList);
}
if(flag)
{
statusLabel3->setText(tr("换乘查询成功!"));
scene->clear();
drawEdges(edgesList);
drawStations(stationsList);
QString text=way==1?("以下线路时间最短,共换乘"+QString::number(stationsList.size()-1)+"个站点\n\n"):
("以下线路换乘最少,共换乘"+QString::number(stationsList.size()-1)+"条线路\n\n");
for(int i=0; i<stationsList.size(); ++i)
{
if(i)
{
text+="\n ↓\n";
}
text+=subwayGraph->getStationName(stationsList[i]);
QString linesStr=getLinesName(subwayGraph->getStationLinesInfo(stationsList[i]));
text+=linesStr;
}
QTextBrowser* browser=ui->textBrowserRoute;
browser->clear();
browser->setText(text);
}
else
{
QMessageBox box;
box.setWindowTitle(tr("换乘查询"));
box.setWindowIcon(QIcon(":/icon/icon/query.png"));
box.setIcon(QMessageBox::Warning);
box.setText(tr("您选择的起始和终止站点暂时无法到达!"));
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
}
}
}
//添加列表视图部件变化槽函数
void MainWindow::tabWidgetCurrentChanged(int index)
{
QWidget* widget=manageLines->ui->tabWidget->currentWidget();
if(widget==manageLines->tabWigetsVector[1])
{
manageLines->linesNameList=subwayGraph->getLinesNameList();
manageLines->updateLinesListWidget();
}
else if(widget==manageLines->tabWigetsVector[2])
{
manageLines->linesNameList=subwayGraph->getLinesNameList();
manageLines->stationsNameList=subwayGraph->getStationsNameList();
manageLines->ui->comboBoxConnectStation1->setMaxCount(manageLines->stationsNameList.size());
manageLines->ui->comboBoxConnectStation2->setMaxCount(manageLines->stationsNameList.size());
manageLines->ui->comboBoxConnectLine->setMaxCount(manageLines->linesNameList.size());
manageLines->updateComboBox();
}
Q_UNUSED(index);
}
//添加线路功能函数
void MainWindow::addLine()
{
QMessageBox box;
box.setWindowTitle(tr("添加线路"));
box.setWindowIcon(QIcon(":/icon/icon/subway.png"));
if(manageLines->lineName.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请输入线路名称!"));
}
else if(subwayGraph->getLineHash(manageLines->lineName)==-1)
{
box.setIcon(QMessageBox::Information);
box.setText(tr("线路:")+manageLines->lineName+tr(" 添加成功!"));
subwayGraph->addLine(manageLines->lineName, manageLines->lineColor);
updateTranserQueryInfo();
}
else
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("添加失败!\n错误原因:线路名已存在!"));
}
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
}
//添加站点功能函数
void MainWindow::addStation()
{
QMessageBox box;
box.setWindowTitle(tr("添加站点"));
box.setWindowIcon(QIcon(":/icon/icon/station.png"));
if(manageLines->stationName.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请输入站点名称!"));
}
else if(manageLines->linesSelected.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请选择站点所属线路!"));
}
else
{
if(subwayGraph->getStationHash(manageLines->stationName)!=-1)
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("添加失败!\n错误原因:站点已存在!"));
}
else
{
Station s(manageLines->stationName, manageLines->longitude, manageLines->latitude,
subwayGraph->getLinesHash(manageLines->linesSelected));
subwayGraph->addStation(s);
box.setText(tr("站点:")+manageLines->stationName+tr(" 添加成功!"));
updateTranserQueryInfo();
}
}
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
on_actionLineMap_triggered();
}
//添加连接功能函数
void MainWindow::addConnection()
{
QString station1=manageLines->ui->comboBoxConnectStation1->currentText();
QString station2=manageLines->ui->comboBoxConnectStation2->currentText();
int s1=subwayGraph->getStationHash(station1);
int s2=subwayGraph->getStationHash(station2);
int l=subwayGraph->getLineHash(manageLines->ui->comboBoxConnectLine->currentText());
QMessageBox box;
box.setWindowTitle(tr("添加连接"));
box.setWindowIcon(QIcon(":/icon/icon/connect.png"));
if(s1==-1||s2==-1||l==-1)
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请选择已有的站点和线路!"));
}
else if(s1==s2)
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("同一站点不需要连接!"));
}
else if(!subwayGraph->getStationLinesInfo(s1).contains(l))
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("连接失败!\n错误原因:所属线路不包含站点1"));
}
else if(!subwayGraph->getStationLinesInfo(s2).contains(l))
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("连接失败!\n错误原因:所属线路不包含站点2"));
}
else
{
box.setIcon(QMessageBox::Information);
box.setText(tr("添加连接成功!"));
subwayGraph->addConnection(s1,s2,l);
}
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
on_actionLineMap_triggered();
}
//文本方式添加功能函数
void MainWindow::addByText()
{
QString writeFile="userAdd.txt";
QFile file(writeFile);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
QMessageBox::critical(NULL, "提示", "无法创建添加文件");
return ;
}
QTextStream out(&file);
out<<manageLines->ui->textEdit->toPlainText();
file.close();
QMessageBox box;
box.setWindowTitle(tr("文本添加"));
box.setWindowIcon(QIcon(":/icon/icon/add.png"));
bool flag=subwayGraph->readFileData(writeFile);
if(flag)
{
box.setIcon(QMessageBox::Information);
box.setText(tr("添加成功"));
}
else
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("添加失败,数据被擦除!"));
}
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
on_actionLineMap_triggered();
return ;
}
//视图放大槽函数
void MainWindow::on_toolEnlarge_triggered()
{
statusLabel3->setText(tr("已放大"));
ui->graphicsView->scale(1.5,1.5);
}
//动作视图缩小槽函数
void MainWindow::on_toolShrink_triggered()
{
statusLabel3->setText(tr("已缩小"));
ui->graphicsView->scale(2.0/3,2.0/3);
}
//动作添加所有槽函数
void MainWindow::on_actionAddAll_triggered()
{
statusLabel3->setText(tr("添加线路、站点、连接关系"));
manageLines->setAllVisible();
manageLines->show();
}
//动作添加线路槽函数
void MainWindow::on_actionAddLine_triggered()
{
statusLabel3->setText(tr("添加线路"));
manageLines->setAddLineVisible();
manageLines->show();
}
//动作添加站点槽函数
void MainWindow::on_actionAddStation_triggered()
{
statusLabel3->setText(tr("添加站点"));
manageLines->setAddStationVisible();
manageLines->show();
}
//动作添加连接槽函数
void MainWindow::on_actionAddConnect_triggered()
{
statusLabel3->setText(tr("添加连接关系"));
manageLines->setAddConnectionVisible();
manageLines->show();
}
//动作文本方式添加槽函数
void MainWindow::on_actionAddByText_triggered()
{
statusLabel3->setText(tr("文本方式简易添加"));
manageLines->setAddByTextVisible();
manageLines->show();
}
//动作查看所有线路图槽函数
void MainWindow::on_actionLineMap_triggered()
{
statusLabel3->setText(tr("图示:上海地铁网络线路图"));
scene->clear();
QList<int> stationsList;
QList<Edge> edgesList;
subwayGraph->getGraph(stationsList,edgesList);
drawEdges(edgesList);
drawStations(stationsList);
// qDebug()<<"stations.size()="<<stationsList.size()<<" edges.size()="<<edgesList.size();
}
//动作是否显示状态栏槽函数
void MainWindow::on_actionstatusBar_triggered(bool checked)
{
if(checked)
{
ui->statusBar->show();
}
else
{
ui->statusBar->hide();
}
}
//动作是否显示工具栏槽函数
void MainWindow::on_actiontoolBar_triggered(bool checked)
{
if(checked)
{
ui->mainToolBar->show();
}
else
{
ui->mainToolBar->hide();
}
}
//动作关于Qt槽函数
void MainWindow::on_actionQt_triggered()
{
QMessageBox::aboutQt(this,tr("关于Qt"));
}
//动作关于作者槽函数
void MainWindow::on_actionAuthor_triggered()
{
QMessageBox box;
box.setWindowTitle(tr("关于制作者"));
box.setIcon(QMessageBox::Information);
box.setText(tr("Author : 1453381 \n"
"School : TJ \n"
"Major : Computer Science \n"
"Emai : 767089181@qq.com \n"));
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec() == QMessageBox::Accepted)
box.close();
}
//动作帮助菜单槽函数
void MainWindow::on_actionuseHelp_triggered()
{
appHelp->show();
}
//动作关闭程序槽函数
void MainWindow::on_actionClose_triggered()
{
close();
}
================================================
FILE: SubwayTransferSystem/mainwindow.h
================================================
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "graphics_view_zoom.h"
#include "subwaygraph.h"
#include "managelines.h"
#include "apphelp.h"
#include <QMainWindow>
#include <QLabel>
#include <QGraphicsScene>
#include <QGraphicsView>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
//视图放大槽函数
void on_toolEnlarge_triggered();
//动作视图缩小槽函数
void on_toolShrink_triggered();
//动作添加所有槽函数
void on_actionAddAll_triggered();
//动作添加线路槽函数
void on_actionAddLine_triggered();
//动作添加站点槽函数
void on_actionAddStation_triggered();
//动作添加连接槽函数
void on_actionAddConnect_triggered();
//动作文本方式添加槽函数
void on_actionAddByText_triggered();
//动作查看所有线路图槽函数
void on_actionLineMap_triggered();
//动作是否显示状态栏槽函数
void on_actionstatusBar_triggered(bool checked);
//动作是否显示工具栏槽函数
void on_actiontoolBar_triggered(bool checked);
//动作关于Qt槽函数
void on_actionQt_triggered();
//动作关于作者槽函数
void on_actionAuthor_triggered();
//动作帮助菜单槽函数
void on_actionuseHelp_triggered();
//动作关闭程序槽函数
void on_actionClose_triggered();
//时间更新槽函数
void timerUpdate();
//添加列表视图部件变化槽函数
void tabWidgetCurrentChanged(int index);
//添加线路功能函数
void addLine();
//添加站点功能函数
void addStation();
//添加连接功能函数
void addConnection();
//文本方式添加功能函数
void addByText();
//更新换乘选择信息
void updateTranserQueryInfo();
//换乘出发线路改变槽函数
void transferStartLineChanged(QString lineName);
//换乘目的线路改变槽函数
void transferDstLineChanged(QString lineNames);
//换乘查询槽函数
void transferQuery();
protected:
Ui::MainWindow *ui; //主窗口UI
Graphics_view_zoom *myView; //自定义视图,用于鼠标缩放
QGraphicsScene *scene; //场景
SubwayGraph* subwayGraph; //后端管理类
ManageLines* manageLines; //添加功能前端管理类
AppHelp* appHelp; //帮助显示类
//由线路表计算混合颜色
QColor getLinesColor(const QList<int>& linesList);
//获得线路表的名字集
QString getLinesName(const QList<int>& linesList);
//将站点的经纬度地理坐标转为视图坐标
QPointF transferCoord(QPointF coord);
//绘制网络图的边
void drawEdges (const QList<Edge>& edgesList);
//绘制网络图的站点节点
void drawStations (const QList<int>& stationsList);
private:
QLabel* statusLabel1, *statusLabel2, *statusLabel3; //状态栏三个文本
//连接信号和槽函数
void myConnect();
//初始状态栏
void initStatusBar();
};
#define LINE_INFO_WIDTH 0 //预留边框用于信息展示
#define MARGIN 30 //视图左边距
#define NET_WIDTH 2000 //网络图最大宽度
#define NET_HEIGHT 2000 //网络图最大高度
#define SCENE_WIDTH (LINE_INFO_WIDTH+MARGIN*2+NET_WIDTH) //视图宽度
#define SCENE_HEIGHT (MARGIN*2+NET_HEIGHT) //视图高度
#define EDGE_PEN_WIDTH 2 //线路边宽
#define NODE_HALF_WIDTH 3 //节点大小
#endif // MAINWINDOW_H
================================================
FILE: SubwayTransferSystem/mainwindow.ui
================================================
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1030</width>
<height>684</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>1030</width>
<height>680</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="windowTitle">
<string>地铁换乘指南</string>
</property>
<property name="windowIcon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/metro-shanghai.png</normaloff>:/icon/icon/metro-shanghai.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<widget class="QWidget" name="centralWidget">
<property name="minimumSize">
<size>
<width>1030</width>
<height>600</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="11,3">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGraphicsView" name="graphicsView">
<property name="minimumSize">
<size>
<width>700</width>
<height>580</height>
</size>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="3,2,3,3,2,2,5,2,32">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="labelAdd">
<property name="minimumSize">
<size>
<width>280</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>11</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>动态添加</string>
</property>
<property name="textFormat">
<enum>Qt::AutoText</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelTransferRoute_2">
<property name="minimumSize">
<size>
<width>280</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>9</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>(请从工具栏中选择)</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>50</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="labelTransfer">
<property name="minimumSize">
<size>
<width>280</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>换乘指南</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout4" stretch="7,9,9">
<property name="spacing">
<number>10</number>
</property>
<item>
<widget class="QLabel" name="labelStart">
<property name="minimumSize">
<size>
<width>70</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>起点站(&S):</string>
</property>
<property name="buddy">
<cstring>comboBoxStartLine</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxStartLine">
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<item>
<property name="text">
<string>选择路线</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxStartStation">
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<item>
<property name="text">
<string>选择站点</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout5" stretch="7,9,9">
<property name="spacing">
<number>10</number>
</property>
<item>
<widget class="QLabel" name="labelDestination">
<property name="minimumSize">
<size>
<width>70</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>终点站(&D):</string>
</property>
<property name="buddy">
<cstring>comboBoxDstLine</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxDstLine">
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<item>
<property name="text">
<string>选择路线</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxDstStation">
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<item>
<property name="text">
<string>选择站点</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout6" stretch="7,19">
<property name="spacing">
<number>10</number>
</property>
<item>
<widget class="QPushButton" name="pushButtonTransfer">
<property name="minimumSize">
<size>
<width>70</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>换乘</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="minimumSize">
<size>
<width>190</width>
<height>30</height>
</size>
</property>
<property name="title">
<string>换乘策略</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,1">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="radioButtonMinTransfer">
<property name="minimumSize">
<size>
<width>100</width>
<height>15</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>换乘次数最少</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButtonMinTime">
<property name="minimumSize">
<size>
<width>100</width>
<height>15</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>所需时间最短</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="labelTransferRoute">
<property name="minimumSize">
<size>
<width>280</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>换乘路线:</string>
</property>
</widget>
</item>
<item>
<widget class="QTextBrowser" name="textBrowserRoute">
<property name="minimumSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1030</width>
<height>25</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>文件(&F)</string>
</property>
<addaction name="actionClose"/>
</widget>
<widget class="QMenu" name="menuTool">
<property name="title">
<string>工具(&T)</string>
</property>
<widget class="QMenu" name="menuAdd">
<property name="title">
<string>动态添加</string>
</property>
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/add.png</normaloff>:/icon/icon/add.png</iconset>
</property>
<addaction name="actionAddAll"/>
<addaction name="separator"/>
<addaction name="actionAddLine"/>
<addaction name="actionAddStation"/>
<addaction name="actionAddConnect"/>
<addaction name="separator"/>
<addaction name="actionAddByText"/>
</widget>
<addaction name="actionTransfer"/>
<addaction name="menuAdd"/>
<addaction name="separator"/>
<addaction name="actionQueryInfo"/>
</widget>
<widget class="QMenu" name="menuWatch">
<property name="title">
<string>查看(&W)</string>
</property>
<addaction name="actiontoolBar"/>
<addaction name="actionstatusBar"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>视图(&V)</string>
</property>
<addaction name="toolEnlarge"/>
<addaction name="toolShrink"/>
<addaction name="actionWheel"/>
<addaction name="separator"/>
<addaction name="actionLineMap"/>
</widget>
<widget class="QMenu" name="menu_H">
<property name="title">
<string>帮助(&H)</string>
</property>
<addaction name="actionuseHelp"/>
</widget>
<widget class="QMenu" name="menu_A">
<property name="title">
<string>关于(&A)</string>
</property>
<addaction name="actionQt"/>
<addaction name="actionAuthor"/>
</widget>
<addaction name="menuHelp"/>
<addaction name="menuTool"/>
<addaction name="menuView"/>
<addaction name="menuWatch"/>
<addaction name="menu_H"/>
<addaction name="menu_A"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonIconOnly</enum>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="separator"/>
<addaction name="toolEnlarge"/>
<addaction name="toolShrink"/>
<addaction name="separator"/>
<addaction name="actionAddAll"/>
<addaction name="actionAddLine"/>
<addaction name="actionAddStation"/>
<addaction name="actionAddConnect"/>
<addaction name="actionAddByText"/>
<addaction name="separator"/>
<addaction name="actionTransfer"/>
<addaction name="actionLineMap"/>
</widget>
<widget class="QStatusBar" name="statusBar">
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</widget>
<action name="actionClose">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>退出</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+E</string>
</property>
</action>
<action name="toolEnlarge">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/enlarge.png</normaloff>:/icon/icon/enlarge.png</iconset>
</property>
<property name="text">
<string>放大</string>
</property>
<property name="toolTip">
<string>点击放大</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+L</string>
</property>
</action>
<action name="toolShrink">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/shrink.png</normaloff>:/icon/icon/shrink.png</iconset>
</property>
<property name="text">
<string>缩小</string>
</property>
<property name="toolTip">
<string>点击缩小</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
<action name="actionTransfer">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/query.png</normaloff>:/icon/icon/query.png</iconset>
</property>
<property name="text">
<string>换乘指南(右栏)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</action>
<action name="actionQueryInfo">
<property name="text">
<string>信息查询(预留)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</action>
<action name="actionAddAll">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/all.png</normaloff>:/icon/icon/all.png</iconset>
</property>
<property name="text">
<string>所有(&A)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+A</string>
</property>
</action>
<action name="actionAddLine">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/subway.png</normaloff>:/icon/icon/subway.png</iconset>
</property>
<property name="text">
<string>线路(&L)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+Shift+L</string>
</property>
</action>
<action name="actionAddStation">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/station.png</normaloff>:/icon/icon/station.png</iconset>
</property>
<property name="text">
<string>站点(&S)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+Shift+S</string>
</property>
</action>
<action name="actionAddConnect">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/connect.png</normaloff>:/icon/icon/connect.png</iconset>
</property>
<property name="text">
<string>连接(&C)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+Shift+C</string>
</property>
</action>
<action name="actionAddByText">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/text.png</normaloff>:/icon/icon/text.png</iconset>
</property>
<property name="text">
<string>文本方式(&T)</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+Shift+T</string>
</property>
</action>
<action name="actiontoolBar">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>toolBar</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</action>
<action name="actionstatusBar">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>statusBar</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</action>
<action name="actionLineMap">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/map.png</normaloff>:/icon/icon/map.png</iconset>
</property>
<property name="text">
<string>地铁图</string>
</property>
<property name="toolTip">
<string>地铁网络线路图</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+M</string>
</property>
</action>
<action name="actionWheel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/mouse.png</normaloff>:/icon/icon/mouse.png</iconset>
</property>
<property name="text">
<string>鼠标可缩放</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</action>
<action name="actionQt">
<property name="icon">
<iconset theme="Qt" resource="resource.qrc">
<normaloff>:/icon/icon/qt.png</normaloff>:/icon/icon/qt.png</iconset>
</property>
<property name="text">
<string>关于Qt</string>
</property>
<property name="shortcut">
<string>Ctrl+B</string>
</property>
</action>
<action name="actionAuthor">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/metro-shanghai.png</normaloff>:/icon/icon/metro-shanghai.png</iconset>
</property>
<property name="text">
<string>制作者</string>
</property>
</action>
<action name="actionuseHelp">
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/help.png</normaloff>:/icon/icon/help.png</iconset>
</property>
<property name="text">
<string>使用帮助</string>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="shortcut">
<string>Ctrl+H</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="resource.qrc"/>
</resources>
<connections/>
</ui>
================================================
FILE: SubwayTransferSystem/managelines.cpp
================================================
#include "ui_managelines.h"
#include "managelines.h"
#include <QPixmap>
#include <QColorDialog>
#include <QFile>
#include <QTextStream>
#include <QDebug>
//构造函数
ManageLines::ManageLines(QWidget *parent) :
QDialog(parent),
ui(new Ui::ManageLines)
{
ui->setupUi(this);
tabWigetsVector.push_back(ui->tabAddLine);
tabWigetsVector.push_back(ui->tabAddStation);
tabWigetsVector.push_back(ui->tabAddConnection);
tabWigetsVector.push_back(ui->tabAddByText);
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/subway.png")));
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/station.png")));
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/connect.png")));
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/text.png")));
tabTextVector.push_back("线路(&L)");
tabTextVector.push_back("站点(&S)");
tabTextVector.push_back("连接(&C)");
tabTextVector.push_back("文本方式(&T)");
QString demoText=tr("警告:本操作文本务必正确,若错误将破坏已有数据\n"
" 请参照以下demo(注意格式需完全一样)\n");
demoText+=tr("- - - - - - - - - - demo.txt- - - - - - - - - - ");
QFile file(":/data/data/demo.txt");
if(!file.open(QIODevice::ReadOnly))
{
demoText=file.errorString();
}
else
{
QTextStream in(&file);
while(!in.atEnd())
{
QString str=in.readLine();
demoText+="\n";
demoText+=str;
}
file.close();
ui->textEdit->setPlaceholderText(demoText);
}
}
//析构函数
ManageLines::~ManageLines()
{
delete ui;
}
//设置所有部件可见
void ManageLines::setAllVisible()
{
ui->tabWidget->clear();
ui->tabWidget->addTab(tabWigetsVector[0],tabIconVector[0],tabTextVector[0]);
ui->tabWidget->addTab(tabWigetsVector[1],tabIconVector[1],tabTextVector[1]);
ui->tabWidget->addTab(tabWigetsVector[2],tabIconVector[2],tabTextVector[2]);
ui->tabWidget->addTab(tabWigetsVector[3],tabIconVector[3],tabTextVector[3]);
}
//设置添加线路部件可见
void ManageLines::setAddLineVisible()
{
ui->tabWidget->clear();
ui->tabWidget->addTab(tabWigetsVector[0],tabIconVector[0],tabTextVector[0]);
}
//设置添加站点部件可见
void ManageLines::setAddStationVisible()
{
ui->tabWidget->clear();
ui->tabWidget->addTab(tabWigetsVector[1],tabIconVector[1],tabTextVector[1]);
}
//设置添加连接部件可见
void ManageLines::setAddConnectionVisible()
{
ui->tabWidget->clear();
ui->tabWidget->addTab(tabWigetsVector[2],tabIconVector[2],tabTextVector[2]);
}
//设置文本添加部件可见
void ManageLines::setAddByTextVisible()
{
ui->tabWidget->clear();
ui->tabWidget->addTab(tabWigetsVector[3],tabIconVector[3],tabTextVector[3]);
}
//更新线路列表信息
void ManageLines::updateLinesListWidget()
{
QListWidget* listWidget=ui->listWidget;
for(int i=0; i<linesNameList.size(); ++i)
{
QListWidgetItem *item =listWidget->takeItem(i);
delete item;
}
listWidget->clear();
linesSelected.clear();
ui->textBrowserLinesSelected->clear();
for(int i=0; i<linesNameList.size(); ++i)
{
QListWidgetItem *item=new QListWidgetItem(linesNameList[i]);
item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
listWidget->addItem(item);
}
}
//更新选择部件
void ManageLines::updateComboBox()
{
ui->comboBoxConnectStation1->clear();
ui->comboBoxConnectStation2->clear();
ui->comboBoxConnectLine->clear();
for (auto &a: stationsNameList)
{
ui->comboBoxConnectStation1->addItem(a);
ui->comboBoxConnectStation2->addItem(a);
}
for (auto &a: linesNameList)
{
ui->comboBoxConnectLine->addItem(a);
}
}
//线路编辑内容改变
void ManageLines::on_lineEditLineName_textChanged(const QString &arg1)
{
lineName=arg1;
ui->textBrowserAddLine->setText(tr("线路:")+lineName+"\n"
+tr("颜色:")+QString::number(lineColor.rgb()-0xff000000,16));
}
//点击选择颜色按钮
void ManageLines::on_pushButtonChooseColor_clicked()
{
QColorDialog colorDialog;
colorDialog.setOptions(QColorDialog::ShowAlphaChannel);
colorDialog.exec();
lineColor=colorDialog.currentColor();
ui->textBrowserAddLine->setText(tr("线路:")+lineName+"\n"
+tr("颜色:")+QString::number(lineColor.rgb()-0xff000000,16));
return ;
}
//站点编辑内容改变
void ManageLines::on_lineEditStationName_textChanged(const QString &arg1)
{
stationName=arg1;
ui->textBrowserAddStaiton->setText(tr("站名:")+stationName+"\n"+
tr("经度:")+QString::number(longitude, 'f', 7)+"\n"+
tr("纬度:")+QString::number(latitude, 'f', 7));
}
//经度编辑内容改变
void ManageLines::on_doubleSpinBoxLatitude_valueChanged(double arg1)
{
latitude=arg1;
ui->textBrowserAddStaiton->setText(tr("站名:")+stationName+"\n"+
tr("经度:")+QString::number(longitude, 'f', 7)+"\n"+
tr("纬度:")+QString::number(latitude, 'f', 7));
}
//纬度编辑内容改变
void ManageLines::on_doubleSpinBoxLongitude_valueChanged(double arg1)
{
longitude=arg1;
ui->textBrowserAddStaiton->setText(tr("站名:")+stationName+"\n"+
tr("经度:")+QString::number(longitude, 'f', 7)+"\n"+
tr("纬度:")+QString::number(latitude, 'f', 7));
}
//列表部件选择项改变
void ManageLines::on_listWidget_itemClicked(QListWidgetItem *item)
{
Q_UNUSED(item);
QString str;
linesSelected.clear();
for (int i=0; i<ui->listWidget->count(); ++i)
{
QListWidgetItem* item=ui->listWidget->item(i);
if(item->checkState()==Qt::Checked)
{
linesSelected.push_back(item->text());
str+=item->text();
str+="\n";
}
}
ui->textBrowserLinesSelected->setText(str);
}
================================================
FILE: SubwayTransferSystem/managelines.h
================================================
#ifndef MANAGELINES_H
#define MANAGELINES_H
#include <QDialog>
#include <QVector>
#include <QTabWidget>
#include <QListWidget>
#include <QListWidgetItem>
#include <QIcon>
#include <QString>
class MainWindow;
namespace Ui {
class ManageLines;
}
class ManageLines : public QDialog
{
Q_OBJECT
private slots:
//线路编辑内容改变
void on_lineEditLineName_textChanged(const QString &arg1);
//点击选择颜色按钮
void on_pushButtonChooseColor_clicked();
//站点编辑内容改变
void on_lineEditStationName_textChanged(const QString &arg1);
//经度编辑内容改变
void on_doubleSpinBoxLatitude_valueChanged(double arg1);
//纬度编辑内容改变
void on_doubleSpinBoxLongitude_valueChanged(double arg1);
//列表部件选择项改变
void on_listWidget_itemClicked(QListWidgetItem *item);
public:
//构造函数
explicit ManageLines(QWidget *parent = 0);
//析构函数
~ManageLines();
//设置所有部件可见
void setAllVisible();
//设置添加线路部件可见
void setAddLineVisible();
//设置添加站点部件可见
void setAddStationVisible();
//设置添加连接部件可见
void setAddConnectionVisible();
//设置文本添加部件可见
void setAddByTextVisible();
//更新线路列表信息
void updateLinesListWidget();
//更新选择部件
void updateComboBox();
protected:
Ui::ManageLines *ui; //UI
QVector<QWidget*> tabWigetsVector; //保存tab部件指针
QVector<QIcon> tabIconVector; //保存tab部件Icon
QVector<QString> tabTextVector; //保存tab部件标题
QString lineName; //保存输入线路名
QColor lineColor; //保存输入线路颜色
QString stationName; //保存输入站点名
double longitude; //保存输入站点经度
double latitude; //保存输入站点纬度
QList<QString> linesNameList; //保存选择线路名表
QList<QString> linesSelected; //保存选择的线路名
QList<QString> stationsNameList; //保存选择站点名表
//声明友元
friend class MainWindow;
};
#endif // MANAGELINES_H
================================================
FILE: SubwayTransferSystem/managelines.ui
================================================
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ManageLines</class>
<widget class="QDialog" name="ManageLines">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="windowTitle">
<string>添加</string>
</property>
<property name="windowIcon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/add.png</normaloff>:/icon/icon/add.png</iconset>
</property>
<widget class="QTabWidget" name="tabWidget">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="tabPosition">
<enum>QTabWidget::North</enum>
</property>
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<property name="elideMode">
<enum>Qt::ElideNone</enum>
</property>
<widget class="QWidget" name="tabAddLine">
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/subway.png</normaloff>:/icon/icon/subway.png</iconset>
</attribute>
<attribute name="title">
<string>线路(&L)</string>
</attribute>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>560</width>
<height>160</height>
</rect>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-weight:600;">提示:</span>新增线路方法</p><p>1.先添加新线路信息;</p><p>2.然后在工具【站点】中添加线路站点;</p><p>3.最后在工具【连接】中确定站点连接关系;</p><p>4.也可以用文本方式简单快捷添加,格式需规范。</p></body></html></string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>线路名称(&N):</string>
</property>
<property name="buddy">
<cstring>lineEditLineName</cstring>
</property>
</widget>
<widget class="QLineEdit" name="lineEditLineName">
<property name="geometry">
<rect>
<x>120</x>
<y>200</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="placeholderText">
<string>请输入线路名</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonAddLine">
<property name="geometry">
<rect>
<x>440</x>
<y>320</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>添加线路</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>20</x>
<y>240</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>线路颜色(&C):</string>
</property>
<property name="buddy">
<cstring>pushButtonChooseColor</cstring>
</property>
</widget>
<widget class="QPushButton" name="pushButtonChooseColor">
<property name="geometry">
<rect>
<x>120</x>
<y>240</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>拾取颜色</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowserAddLine">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>400</x>
<y>200</y>
<width>140</width>
<height>60</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_21">
<property name="geometry">
<rect>
<x>400</x>
<y>180</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>添加信息:</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabAddStation">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/station.png</normaloff>:/icon/icon/station.png</iconset>
</attribute>
<attribute name="title">
<string>站点(&S)</string>
</attribute>
<widget class="QDoubleSpinBox" name="doubleSpinBoxLatitude">
<property name="geometry">
<rect>
<x>70</x>
<y>160</y>
<width>88</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>85</width>
<height>20</height>
</size>
</property>
<property name="decimals">
<number>7</number>
</property>
<property name="minimum">
<double>30.899999999999999</double>
</property>
<property name="maximum">
<double>31.449999999999999</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="value">
<double>30.899999999999999</double>
</property>
</widget>
<widget class="QLabel" name="labelLatitude">
<property name="geometry">
<rect>
<x>20</x>
<y>160</y>
<width>35</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>北纬&N</string>
</property>
<property name="buddy">
<cstring>doubleSpinBoxLatitude</cstring>
</property>
</widget>
<widget class="QLabel" name="labelLongitude">
<property name="geometry">
<rect>
<x>20</x>
<y>130</y>
<width>35</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>35</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>东经&E</string>
</property>
<property name="buddy">
<cstring>doubleSpinBoxLongitude</cstring>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBoxLongitude">
<property name="geometry">
<rect>
<x>70</x>
<y>130</y>
<width>89</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>85</width>
<height>20</height>
</size>
</property>
<property name="decimals">
<number>7</number>
</property>
<property name="minimum">
<double>121.000000000000000</double>
</property>
<property name="maximum">
<double>122.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="value">
<double>121.000000000000000</double>
</property>
</widget>
<widget class="QLineEdit" name="lineEditStationName">
<property name="geometry">
<rect>
<x>20</x>
<y>50</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string/>
</property>
<property name="placeholderText">
<string>添加站点名</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowserLinesSelected">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>440</x>
<y>50</y>
<width>140</width>
<height>140</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>站点名称(&N):</string>
</property>
<property name="buddy">
<cstring>lineEditStationName</cstring>
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>20</x>
<y>100</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>地理坐标(&P):</string>
</property>
<property name="buddy">
<cstring>doubleSpinBoxLongitude</cstring>
</property>
</widget>
<widget class="QLabel" name="label_10">
<property name="geometry">
<rect>
<x>440</x>
<y>20</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>已选择:</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonAddStation">
<property name="geometry">
<rect>
<x>440</x>
<y>330</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>添加站点</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_11">
<property name="geometry">
<rect>
<x>200</x>
<y>20</y>
<width>200</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>选择 添加到线路:</string>
</property>
</widget>
<widget class="QLabel" name="label_22">
<property name="geometry">
<rect>
<x>440</x>
<y>200</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>添加信息:</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowserAddStaiton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>440</x>
<y>230</y>
<width>140</width>
<height>91</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_23">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>160</width>
<height>80</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p>有效范围:</p><p>min [ 121.0 , 30.9 ]</p><p>max [ 122.0 , 31.5 ]</p><p><br/></p></body></html></string>
</property>
</widget>
<widget class="QListWidget" name="listWidget">
<property name="geometry">
<rect>
<x>200</x>
<y>50</y>
<width>200</width>
<height>270</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabAddConnection">
<property name="enabled">
<bool>true</bool>
</property>
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/connect.png</normaloff>:/icon/icon/connect.png</iconset>
</attribute>
<attribute name="title">
<string>连接(&C)</string>
</attribute>
<widget class="QComboBox" name="comboBoxConnectStation1">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>100</x>
<y>170</y>
<width>100</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>20</x>
<y>170</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>站点1(&O):</string>
</property>
<property name="buddy">
<cstring>comboBoxConnectStation1</cstring>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>20</x>
<y>210</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>站点2(&T):</string>
</property>
<property name="buddy">
<cstring>comboBoxConnectStation2</cstring>
</property>
</widget>
<widget class="QComboBox" name="comboBoxConnectStation2">
<property name="geometry">
<rect>
<x>100</x>
<y>210</y>
<width>100</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButtonConnect">
<property name="geometry">
<rect>
<x>100</x>
<y>290</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>连接</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>20</x>
<y>250</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>所属线路(&L):</string>
</property>
<property name="buddy">
<cstring>comboBoxConnectLine</cstring>
</property>
</widget>
<widget class="QComboBox" name="comboBoxConnectLine">
<property name="geometry">
<rect>
<x>100</x>
<y>250</y>
<width>100</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>560</width>
<height>100</height>
</rect>
</property>
<property name="text">
<string><html><head/><body><p><span style=" font-weight:600;">提示:</span>连接站点</p><p>1.连接“站点1”和“站点2”为一条边;</p><p>2.“站点1”和“站点2”属于同一条线路中的不同站点;</p><p>3.站点及线路选择可以选择也可直接输入。</p></body></html></string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabAddByText">
<attribute name="title">
<string>文本方式</string>
</attribute>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>560</width>
<height>300</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButtonAddByText">
<property name="geometry">
<rect>
<x>440</x>
<y>330</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>添加</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</widget>
</widget>
</widget>
<resources>
<include location="resource.qrc"/>
</resources>
<connections/>
</ui>
================================================
FILE: SubwayTransferSystem/myview.cpp
================================================
#include "myview.h"
MyView::MyView(QWidget *parent) : QGraphicsView(parent)
{
// setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// setRenderHint(QPainter::Antialiasing);
// setCursor(Qt::PointingHandCursor);
// centerOn(0,0);
}
void MyView::wheelEvent(QWheelEvent *event)
{
if(event->delta()>0)
scale(0.5,0.5);
else
scale(2,2);
}
void MyView::mousePressEvent(QMouseEvent *event)
{
rotate(90); //视图旋转顺时针90度
}
void MyView::keyPressEvent(QKeyEvent *event)
{
items().at(1)->setPos(400,400);
}
================================================
FILE: SubwayTransferSystem/myview.h
================================================
#ifndef MYVIEW_H
#define MYVIEW_H
#include <QGraphicsView>
#include <QWheelEvent>
#include <QGraphicsItem>
class MyView : public QGraphicsView
{
public:
explicit MyView(QWidget *parent = 0);
protected:
void wheelEvent(QWheelEvent *event);
void mousePressEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
signals:
public slots:
};
#endif // MYVIEW_H
================================================
FILE: SubwayTransferSystem/querytransfer.cpp
================================================
#include "querytransfer.h"
#include "ui_querytransfer.h"
QueryTransfer::QueryTransfer(QWidget *parent) :
QDialog(parent),
ui(new Ui::QueryTransfer)
{
ui->setupUi(this);
}
QueryTransfer::~QueryTransfer()
{
delete ui;
}
================================================
FILE: SubwayTransferSystem/querytransfer.h
================================================
#ifndef QUERYTRANSFER_H
#define QUERYTRANSFER_H
#include <QDialog>
namespace Ui {
class QueryTransfer;
}
class QueryTransfer : public QDialog
{
Q_OBJECT
public:
explicit QueryTransfer(QWidget *parent = 0);
~QueryTransfer();
public:
Ui::QueryTransfer *ui;
};
#endif // QUERYTRANSFER_H
================================================
FILE: SubwayTransferSystem/querytransfer.ui
================================================
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QueryTransfer</class>
<widget class="QDialog" name="QueryTransfer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>320</width>
<height>570</height>
</rect>
</property>
<property name="windowTitle">
<string>换乘指南</string>
</property>
<property name="windowIcon">
<iconset resource="resource.qrc">
<normaloff>:/icon/icon/query.png</normaloff>:/icon/icon/query.png</iconset>
</property>
<widget class="QLabel" name="labelTransferRoute">
<property name="geometry">
<rect>
<x>10</x>
<y>170</y>
<width>300</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>换乘路线:</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowserRoute">
<property name="geometry">
<rect>
<x>10</x>
<y>200</y>
<width>300</width>
<height>360</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
</widget>
<widget class="QPushButton" name="pushButtonTransfer">
<property name="geometry">
<rect>
<x>220</x>
<y>110</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>换乘</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>80</y>
<width>190</width>
<height>60</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="title">
<string>出行策略</string>
</property>
<widget class="QRadioButton" name="radioButtonMinTime">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>180</width>
<height>16</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>所需时间最短</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QRadioButton" name="radioButtonMinTransfer">
<property name="geometry">
<rect>
<x>0</x>
<y>40</y>
<width>180</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>换乘次数最少</string>
</property>
</widget>
</widget>
<widget class="QComboBox" name="comboBoxDstLine">
<property name="geometry">
<rect>
<x>110</x>
<y>50</y>
<width>90</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>选择路线</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="comboBoxDstStation">
<property name="geometry">
<rect>
<x>210</x>
<y>50</y>
<width>90</width>
<height>22</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
<item>
<property name="text">
<string>选择站点</string>
</property>
</item>
</widget>
<widget class="QLabel" name="labelDestination">
<property name="geometry">
<rect>
<x>10</x>
<y>50</y>
<width>90</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>终点站(&D):</string>
</property>
<property name="buddy">
<cstring>comboBoxDstLine</cstring>
</property>
</widget>
<widget class="QLabel" name="labelStart">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>90</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="text">
<string>起点站(&S):</string>
</property>
<property name="buddy">
<cstring>comboBoxStartLine</cstring>
</property>
</widget>
<widget class="QComboBox" name="comboBoxStartLine">
<property name="geometry">
<rect>
<x>110</x>
<y>20</y>
<width>90</width>
<height>20</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="currentText">
<string>选择路线</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>选择路线</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="comboBoxStartStation">
<property name="geometry">
<rect>
<x>210</x>
<y>20</y>
<width>90</width>
<height>22</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>90</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
</font>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
<item>
<property name="text">
<string>选择站点</string>
</property>
</item>
</widget>
</widget>
<resources>
<include location="resource.qrc"/>
</resources>
<connections/>
</ui>
================================================
FILE: SubwayTransferSystem/resource.qrc
================================================
<RCC>
<qresource prefix="/icon">
<file>icon/enlarge.png</file>
<file>icon/shrink.png</file>
<file>icon/connect.png</file>
<file>icon/station.png</file>
<file>icon/subway.png</file>
<file>icon/add.png</file>
<file>icon/all.png</file>
<file>icon/text.png</file>
<file>icon/query.png</file>
<file>icon/map.png</file>
<file>icon/metro-shanghai.png</file>
<file>icon/splash.png</file>
<file>icon/mouse.png</file>
<file>icon/qt.png</file>
<file>icon/help.png</file>
</qresource>
<qresource prefix="/data">
<file>data/outLine.txt</file>
<file>data/demo.txt</file>
</qresource>
<qresource prefix="/html">
<file>html/helpAddByText.html</file>
<file>html/helpAddConnection.html</file>
<file>html/helpAddLine.html</file>
<file>html/helpAddStation.html</file>
<file>html/helpTransfer.html</file>
<file>html/helpWatch.html</file>
</qresource>
</RCC>
================================================
FILE: SubwayTransferSystem/station.cpp
================================================
#include "station.h"
#include <math.h>
// 角度转弧度
double rad(double d)
{
const double PI = 3.1415926535898;
return d * PI / 180.0;
}
// 传入两个经纬度,计算之间的大致直线距离
int calcuDistance(double fLati1, double fLong1, double fLati2, double fLong2)
{
const double EARTH_RADIUS = 6378.137;
double radLat1 = rad(fLati1);
double radLat2 = rad(fLati2);
double a = radLat1 - radLat2;
double b = rad(fLong1) - rad(fLong2);
double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
s = s * EARTH_RADIUS;
s = (int)(s * 10000000) / 10000;
return s;
}
double Station::minLongitude = 200;
double Station::minLatitude = 200;
double Station::maxLongitude = 0;
double Station::maxLatitude = 0;
//构造函数
Station::Station()
{
}
//构造函数
Station::Station(QString nameStr, double longi, double lati, QList<int> linesList):
name(nameStr), longitude(longi), latitude(lati)
{
linesInfo=linesList.toSet();
}
//求取站点间实地直线距离
int Station::distance(Station other)
{
return calcuDistance(latitude, longitude, other.latitude, other.longitude);
}
================================================
FILE: SubwayTransferSystem/station.h
================================================
#ifndef STATION_H
#define STATION_H
#include <QString>
#include <QPointF>
#include <QSet>
class SubwayGraph;
class QTextStream;
//地铁站点类定义
class Station
{
protected:
int id; //站点ID
QString name; //站点名称
double longitude, latitude; //站点经纬度
QSet<int> linesInfo; //站点所属线路
//所有站点的边界位置
static double minLongitude, minLatitude, maxLongitude, maxLatitude;
public:
//构造函数
Station();
Station(QString nameStr, double longi, double lati, QList<int> linesList);
protected:
//求取站点间实地直线距离
int distance(Station other);
//声明友元
friend class SubwayGraph;
friend class QTextStream;
};
#endif // STATION_H
================================================
FILE: SubwayTransferSystem/subwaygraph.cpp
================================================
#include "subwaygraph.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <queue>
//构造函数
SubwayGraph::SubwayGraph()
{
}
//从文件读取数据
bool SubwayGraph::readFileData(QString fileName)
{
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
return false;
QTextStream in(&file);
while(!in.atEnd())
{
Line line;
QString id, name, colour, fromTo, totalStations;
QString color, froms, tos;
bool ok;
int total;
Station station;
int lvIndex, svIndex1, svIndex2;
in>>id>>line.id;
in>>name>>line.name;
in>>colour>>color;
line.color.setRgba(color.remove(0,1).toUInt(&ok, 16));
in>>fromTo>>froms>>tos;
in>>totalStations>>total;
line.fromTo.push_back(froms);
line.fromTo.push_back(tos);
if (linesHash.count(line.name))
{
lvIndex = linesHash[line.name];
lines[lvIndex].fromTo.push_back(froms);
lines[lvIndex].fromTo.push_back(tos);
}
else
{
lvIndex = linesHash[line.name] = lines.size();
lines.push_back(line);
}
QString longlat;
QStringList strList;
for (int i=0; !in.atEnd()&&i<total; ++i)
{
in>>station.id>>station.name>>longlat;
strList=longlat.split(QChar(','));
station.longitude=strList.first().toDouble();
station.latitude=strList.last().toDouble();
// qDebug()<<station.longitude<<" "<<station.latitude<<"\n";
// d1=station.longitude;
// if(fabs(d1-d2)<1e-8)
// {
// qDebug()<<line.name<<" "<<station.id<<" "<<station.name<<"经度数据有误"<<"\n";
// }
// d2=d1;
if (stationsHash.count(station.name))
{
svIndex2 = stationsHash[station.name];
}
else
{
svIndex2 = stationsHash[station.name] = stations.size();
stations.push_back(station);
}
stations[svIndex2].linesInfo.insert(lvIndex);
lines[lvIndex].stationsSet.insert(svIndex2);
if (i)
{
lines[lvIndex].edges.insert(Edge(svIndex1, svIndex2));
lines[lvIndex].edges.insert(Edge(svIndex2, svIndex1));
insertEdge(svIndex1, svIndex2);
}
svIndex1 = svIndex2;
}
bool flag = id=="id:" && name=="name:" && colour=="colour:" && fromTo=="fromTo:"
&& totalStations=="totalStations:" && ok && !in.atEnd();
// qDebug()<< "ok="<<ok<<" flag="<<flag<<line.id<< " "<<station.name<< "\n";
if(flag==false)
{
file.close();
clearData();
return false ;
}
in.readLine();
}
file.close();
updateMinMaxLongiLati();
return true;
}
//清空数据
void SubwayGraph::clearData()
{
stations.clear();
lines.clear();
stationsHash.clear();
linesHash.clear();
edges.clear();
graph.clear();
}
//插入一条边
bool SubwayGraph::insertEdge(int n1, int n2)
{
if (edges.contains(Edge(n1, n2)) || edges.contains(Edge(n2, n1)))
{
return false;
}
edges.insert(Edge(n1, n2));
return true;
}
//生成图结构
void SubwayGraph::makeGraph()
{
graph.clear();
graph=QVector<QVector<Node>>(stations.size(), QVector<Node>());
for (auto &a : edges)
{
double dist=stations[a.first].distance(stations[a.second]);
graph[a.first].push_back(Node(a.second, dist));
graph[a.second].push_back(Node(a.first, dist));
}
}
//获取线路颜色
QColor SubwayGraph::getLineColor(int l)
{
return lines[l].color;
}
//获取线路名
QString SubwayGraph::getLineName(int l)
{
return lines[l].name;
}
//获取线路hash值
int SubwayGraph::getLineHash(QString lineName)
{
if(linesHash.contains(lineName))
{
return linesHash[lineName];
}
return -1;
}
//获取线路集合hash值
QList<int> SubwayGraph::getLinesHash(QList<QString> linesList)
{
QList<int> hashList;
for (auto &a:linesList)
{
hashList.push_back(getLineHash(a));
}
return hashList;
}
//获取线路名集合
QList<QString> SubwayGraph::getLinesNameList()
{
QList<QString> linesNameList;
for (auto a:lines)
{
linesNameList.push_back(a.name);
}
return linesNameList;
}
//获取线路的所有包含站点
QList<QString> SubwayGraph::getLineStationsList(int l)
{
QList<QString> stationsList;
for (auto &a:lines[l].stationsSet)
{
stationsList.push_back(stations[a].name);
}
return stationsList;
}
//更新边界经纬度
void SubwayGraph::updateMinMaxLongiLati()
{
double minLongitude=200, minLatitude=200;
double maxLongitude=0, maxLatitude=0;
for (auto &s : stations)
{
minLongitude = qMin(minLongitude, s.longitude);
minLatitude = qMin(minLatitude, s.latitude);
maxLongitude = qMax(maxLongitude, s.longitude);
maxLatitude = qMax(maxLatitude, s.latitude);
}
Station::minLongitude = minLongitude;
Station::minLatitude = minLatitude;
Station::maxLongitude = maxLongitude;
Station::maxLatitude = maxLatitude;
// qDebug("minLon=%.10lf, minLat=%.10lf\n", minLongitude, minLatitude);
// qDebug("maxLon=%.10lf, maxLat=%.10lf\n", maxLongitude, maxLatitude);
}
//获取站点最小坐标
QPointF SubwayGraph::getMinCoord()
{
return QPointF(Station::minLongitude, Station::minLatitude);
}
//获取站点最大坐标
QPointF SubwayGraph::getMaxCoord()
{
return QPointF(Station::maxLongitude, Station::maxLatitude);
}
//获取两个站点的公共所属线路
QList<int> SubwayGraph::getCommonLines(int s1, int s2)
{
QList<int> linesList;
for (auto &s : stations[s1].linesInfo)
{
if(stations[s2].linesInfo.contains(s))
linesList.push_back(s);
}
return linesList;
}
//获取站点名
QString SubwayGraph::getStationName(int s)
{
return stations[s].name;
}
//获取站点地理坐标
QPointF SubwayGraph::getStationCoord(int s)
{
return QPointF(stations[s].longitude, stations[s].latitude);
}
//获取站点所属线路信息
QList<int> SubwayGraph::getStationLinesInfo(int s)
{
return stations[s].linesInfo.toList();
}
//获取站点hash值
int SubwayGraph::getStationHash(QString stationName)
{
if(stationsHash.contains(stationName))
{
return stationsHash[stationName];
}
return -1;
}
//获取站点集合hash值
QList<QString> SubwayGraph::getStationsNameList()
{
QList<QString> list;
for (auto &a: stations)
{
list.push_back(a.name);
}
return list;
}
//添加新线路
void SubwayGraph::addLine(QString lineName, QColor color)
{
linesHash[lineName]=lines.size();
lines.push_back(Line(lineName,color));
}
//添加新站点
void SubwayGraph::addStation(Station s)
{
int hash=stations.size();
stationsHash[s.name]=hash;
stations.push_back(s);
for (auto &a: s.linesInfo)
{
lines[a].stationsSet.insert(hash);
}
updateMinMaxLongiLati();
}
//添加站点连接关系
void SubwayGraph::addConnection(int s1, int s2, int l)
{
insertEdge(s1,s2);
lines[l].edges.insert(Edge(s1,s2));
lines[l].edges.insert(Edge(s2,s1));
}
//获取网络结构,用于前端显示
void SubwayGraph::getGraph(QList<int>&stationsList, QList<Edge>&edgesList)
{
stationsList.clear();
for (int i=0; i<stations.size(); ++i)
{
stationsList.push_back(i);
}
edgesList=edges.toList();
return ;
}
//获取最少时间的线路
bool SubwayGraph::queryTransferMinTime(int s1, int s2, QList<int>&stationsList, QList<Edge>&edgesList)
{
#define INF 999999999
stationsList.clear();
edgesList.clear();
if(s1==s2)
{
stationsList.push_back(s2);
stationsList.push_back(s1);
return true;
}
makeGraph();
std::vector<int> path(stations.size(), -1);
std::vector<double> dist(stations.size(), INF);
dist[s1]=0;
std::priority_queue<Node, std::vector<Node>, std::greater<Node>> priQ;
priQ.push(Node(s1, 0));
while(!priQ.empty())
{
Node top=priQ.top();
priQ.pop();
if(top.stationID==s2)
{
break ;
}
for (int i=0; i<graph[top.stationID].size(); ++i)
{
Node &adjNode=graph[top.stationID][i];
if(top.distance+adjNode.distance<dist[adjNode.stationID])
{
path[adjNode.stationID]=top.stationID;
dist[adjNode.stationID]=top.distance+adjNode.distance;
priQ.push(Node(adjNode.stationID, dist[adjNode.stationID]));
}
}
}
if(path[s2]==-1)
{
return false;
}
int p=s2;
while(path[p]!=-1)
{
stationsList.push_front(p);
edgesList.push_front(Edge(path[p],p));
p=path[p];
}
stationsList.push_front(s1);
// qDebug()<<"s1="<<s1<<" s2="<<s2<<" size= "<<stationsList.size()<<" "<<edgesList.size()<<"\n";
return true;
}
//获取最少换乘的线路
bool SubwayGraph::queryTransferMinTransfer(int s1, int s2, QList<int>&stationsList, QList<Edge>&edgesList)
{
stationsList.clear();
edgesList.clear();
if(s1==s2)
{
stationsList.push_back(s2);
stationsList.push_back(s1);
return true;
}
std::vector<bool> linesVisted(lines.size(),false);
std::vector<int> path(stations.size(),-1);
path[s1]=-2;
std::queue<int> que;
que.push(s1);
while(!que.empty())
{
int top=que.front();
que.pop();
for (auto &l: stations[top].linesInfo)
{
if(!linesVisted[l])
{
linesVisted[l]=true;
for (auto &s: lines[l].stationsSet)
{
if(path[s]==-1)
{
path[s]=top;
que.push(s);
}
}
}
}
}
if(path[s2]==-1)
{
return false;
}
int p=s2;
while(path[p]!=-2)
{
stationsList.push_front(p);
edgesList.push_front(Edge(path[p],p));
p=path[p];
}
stationsList.push_front(s1);
return true;
}
================================================
FILE: SubwayTransferSystem/subwaygraph.h
================================================
#ifndef SUBWAYGRAPH_H
#define SUBWAYGRAPH_H
#include "station.h"
#include "line.h"
#include <QString>
#include <QPoint>
#include <QVector>
#include <QHash>
//图的邻接点结构
class Node{
public:
int stationID; //邻接点ID
double distance; //两点距离
//构造函数
Node(){};
Node(int s, double dist) :stationID(s), distance(dist)
{};
//">"运算重载,用于小顶堆
bool operator > (const Node& n) const
{
return this->distance>n.distance;
}
};
//后端管理类
class SubwayGraph
{
protected:
QVector<Station> stations; //存储所有站点
QVector<Line> lines; //存储所有线路
QHash<QString, int> stationsHash; //站点名到存储位置的hash
QHash<QString, int> linesHash; //线路名到存储位置的hash
QSet<Edge> edges; //所有边的集合
QVector<QVector<Node>> graph; //地铁线路网络图
public:
//构造函数
SubwayGraph();
//获取线路名
QString getLineName(int l);
//获取线路颜色
QColor getLineColor(int l);
//获取线路hash值
int getLineHash(QString lineName);
//获取线路集合hash值
QList<int> getLinesHash(QList<QString> linesList);
//获取线路名集合
QList<QString> getLinesNameList();
//获取线路的所有包含站点
QList<QString> getLineStationsList(int l);
//获取站点名
QString getStationName(int s);
//获取站点地理坐标
QPointF getStationCoord(int s);
//获取站点最小坐标
QPointF getMinCoord();
//获取站点最大坐标
QPointF getMaxCoord();
//获取站点所属线路信息
QList<int> getStationLinesInfo(int s);
//获取两个站点的公共所属线路
QList<int> getCommonLines(int s1, int s2);
//获取站点hash值
int getStationHash(QString stationName);
//获取站点集合hash值
QList<QString> getStationsNameList();
//添加新线路
void addLine(QString lineName, QColor color);
//添加新站点
void addStation(Station s);
//添加站点连接关系
void addConnection(int s1, int s2, int l);
//获取网络结构,用于前端显示
void getGraph(QList<int>&stationsList, QList<Edge>&edgesList);
//获取最少时间的线路
bool queryTransferMinTime(int s1, int s2,
QList<int>&stationsList,
QList<Edge>&edgesList);
//获取最少换乘的线路
bool queryTransferMinTransfer(int s1, int s2,
QList<int>&stationsList,
QList<Edge>&edgesList);
//从文件读取数据
bool readFileData(QString fileName);
private:
//清空数据
void clearData();
//插入一条边
bool insertEdge(int s1, int s2);
//更新边界经纬度
void updateMinMaxLongiLati();
//生成图结构
void makeGraph();
};
#endif // SUBWAYGRAPH_H
================================================
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/.qmake.stash
================================================
QMAKE_CXX.INCDIRS = \
D:/software/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include \
D:/software/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include-fixed \
D:/software/Qt/Tools/mingw530_32/i686-w64-mingw32/include \
D:/software/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++ \
D:/software/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/i686-w64-mingw32 \
D:/software/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/backward
QMAKE_CXX.LIBDIRS = \
D:/software/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0 \
D:/software/Qt/Tools/mingw530_32/lib/gcc \
D:/software/Qt/Tools/mingw530_32/i686-w64-mingw32/lib \
D:/software/Qt/Tools/mingw530_32/lib
QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 5
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
QMAKE_CXX.COMPILER_MACROS = \
QT_COMPILER_STDCXX \
QMAKE_GCC_MAJOR_VERSION \
QMAKE_GCC_MINOR_VERSION \
QMAKE_GCC_PATCH_VERSION
================================================
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/Makefile
================================================
#############################################################################
# Makefile for building: SubwayTransferSystem
# Generated by qmake (3.1) (Qt 5.9.1)
# Project: ..\SubwayTransferSystem\SubwayTransferSystem.pro
# Template: app
# Command: D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe -o Makefile ..\SubwayTransferSystem\SubwayTransferSystem.pro -spec win32-g++
#############################################################################
MAKEFILE = Makefile
first: release
install: release-install
uninstall: release-uninstall
QMAKE = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe
DEL_FILE = del
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
COPY = copy /y
COPY_FILE = copy /y
COPY_DIR = xcopy /s /q /y /i
INSTALL_FILE = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR = xcopy /s /q /y /i
QINSTALL = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe -install qinstall
QINSTALL_PROGRAM = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe -install qinstall -exe
DEL_FILE = del
SYMLINK = $(QMAKE) -install ln -f -s
DEL_DIR = rmdir
MOVE = move
SUBTARGETS = \
release \
debug
release: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-all: FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall
debug: FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-all: FORCE
$(MAKE) -f $(MAKEFILE).Debug all
debug-clean: FORCE
$(MAKE) -f $(MAKEFILE).Debug clean
debug-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Debug distclean
debug-install: FORCE
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Debug uninstall
Makefile: ../SubwayTransferSystem/SubwayTransferSystem.pro ../../../software/Qt/5.9.1/mingw53_32/mkspecs/win32-g++/qmake.conf ../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/spec_pre.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/qdevice.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/device_config.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/g++-base.conf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/angle.conf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/sanitize.conf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/gcc-base.conf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/qconfig.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3danimation.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3danimation_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dcore.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dcore_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dextras.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dextras_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dinput.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dinput_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dlogic.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dlogic_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquick.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquick_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickanimation.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickextras.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickextras_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickinput.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickinput_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickrender.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickrender_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickscene2d.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3drender.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3drender_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_accessibility_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axbase.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axbase_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axcontainer.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axcontainer_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axserver.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axserver_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bluetooth.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bluetooth_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bootstrap_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_concurrent.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_concurrent_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_core.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_core_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_dbus.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_dbus_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designer.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designer_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designercomponents_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_egl_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_fb_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gamepad.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gamepad_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gui.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gui_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_help.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_help_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_location.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_location_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimedia.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimedia_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_network.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_network_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_nfc.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_nfc_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_opengl.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_opengl_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_openglextensions.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_openglextensions_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_packetprotocol_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_positioning.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_positioning_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_printsupport.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_printsupport_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qml.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qml_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmldebug_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmldevtools_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmltest.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmltest_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quick.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quick_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickparticles_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickwidgets.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickwidgets_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_scxml.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_scxml_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sensors.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sensors_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialbus.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialbus_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialport.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialport_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sql.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sql_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_svg.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_svg_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_testlib.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_testlib_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_theme_support_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uiplugin.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uitools.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uitools_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_webchannel.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_webchannel_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_websockets.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_websockets_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_widgets.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_widgets_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_winextras.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_winextras_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xml.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xml_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt_functions.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt_config.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/win32-g++/qmake.conf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/spec_post.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exclusive_builds.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/toolchain.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/default_pre.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/default_pre.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/resolve_config.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exclusive_builds_post.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/default_post.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/precompile_header.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/warn_on.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/resources.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/moc.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/opengl.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/uic.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qmake_use.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/file_copies.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/windows.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/testcase_targets.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exceptions.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/yacc.prf \
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/lex.prf \
../SubwayTransferSystem/SubwayTransferSystem.pro \
../../../software/Qt/5.9.1/mingw53_32/lib/qtmain.prl \
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Widgets.prl \
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Gui.prl \
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Core.prl
$(QMAKE) -o Makefile ..\SubwayTransferSystem\SubwayTransferSystem.pro -spec win32-g++
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/spec_pre.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/qdevice.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/device_config.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/g++-base.conf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/angle.conf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/sanitize.conf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/common/gcc-base.conf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/qconfig.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3danimation.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3danimation_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dcore.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dcore_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dextras.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dextras_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dinput.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dinput_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dlogic.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dlogic_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquick.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquick_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickanimation.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickextras.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickextras_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickinput.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickinput_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickrender.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickrender_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickscene2d.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3drender.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_3drender_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_accessibility_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axbase.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axbase_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axcontainer.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axcontainer_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axserver.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_axserver_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bluetooth.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bluetooth_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_bootstrap_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_concurrent.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_concurrent_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_core.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_core_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_dbus.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_dbus_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designer.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designer_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_designercomponents_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_egl_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_fb_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gamepad.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gamepad_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gui.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_gui_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_help.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_help_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_location.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_location_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimedia.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimedia_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_network.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_network_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_nfc.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_nfc_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_opengl.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_opengl_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_openglextensions.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_openglextensions_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_packetprotocol_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_positioning.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_positioning_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_printsupport.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_printsupport_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qml.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qml_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmldebug_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmldevtools_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmltest.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qmltest_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quick.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quick_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickparticles_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickwidgets.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_quickwidgets_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_scxml.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_scxml_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sensors.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sensors_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialbus.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialbus_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialport.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_serialport_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sql.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_sql_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_svg.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_svg_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_testlib.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_testlib_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_theme_support_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uiplugin.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uitools.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_uitools_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_webchannel.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_webchannel_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_websockets.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_websockets_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_widgets.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_widgets_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_winextras.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_winextras_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xml.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xml_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt_functions.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt_config.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/win32-g++/qmake.conf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/spec_post.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exclusive_builds.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/toolchain.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/default_pre.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/default_pre.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/resolve_config.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exclusive_builds_post.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/default_post.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/precompile_header.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/warn_on.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qt.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/resources.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/moc.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/opengl.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/uic.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/qmake_use.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/file_copies.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/win32/windows.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/testcase_targets.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/exceptions.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/yacc.prf:
../../../software/Qt/5.9.1/mingw53_32/mkspecs/features/lex.prf:
../SubwayTransferSystem/SubwayTransferSystem.pro:
../../../software/Qt/5.9.1/mingw53_32/lib/qtmain.prl:
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Widgets.prl:
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Gui.prl:
../../../software/Qt/5.9.1/mingw53_32/lib/Qt5Core.prl:
qmake: FORCE
@$(QMAKE) -o Makefile ..\SubwayTransferSystem\SubwayTransferSystem.pro -spec win32-g++
qmake_all: FORCE
make_first: release-make_first debug-make_first FORCE
all: release-all debug-all FORCE
clean: release-clean debug-clean FORCE
distclean: release-distclean debug-distclean FORCE
-$(DEL_FILE) Makefile
-$(DEL_FILE) .qmake.stash
release-mocclean:
$(MAKE) -f $(MAKEFILE).Release mocclean
debug-mocclean:
$(MAKE) -f $(MAKEFILE).Debug mocclean
mocclean: release-mocclean debug-mocclean
release-mocables:
$(MAKE) -f $(MAKEFILE).Release mocables
debug-mocables:
$(MAKE) -f $(MAKEFILE).Debug mocables
mocables: release-mocables debug-mocables
check: first
benchmark: first
FORCE:
$(MAKEFILE).Release: Makefile
$(MAKEFILE).Debug: Makefile
================================================
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/Makefile.Debug
================================================
#############################################################################
# Makefile for building: SubwayTransferSystem
# Generated by qmake (3.1) (Qt 5.9.1)
# Project: ..\SubwayTransferSystem\SubwayTransferSystem.pro
# Template: app
#############################################################################
MAKEFILE = Makefile.Debug
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES = -DUNICODE -DQT_DEPRECATED_WARNINGS -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
CFLAGS = -fno-keep-inline-dllexport -pipe -g -Wextra -Wall -W $(DEFINES)
CXXFLAGS = -fno-keep-inline-dllexport -pipe -g -std=gnu++11 -Wextra -Wall -W -fexceptions -mthreads $(DEFINES)
INCPATH = -I..\SubwayTransferSystem -I. -I..\..\..\software\Qt\5.9.1\mingw53_32\include -I..\..\..\software\Qt\5.9.1\mingw53_32\include\QtWidgets -I..\..\..\software\Qt\5.9.1\mingw53_32\include\QtGui -I..\..\..\software\Qt\5.9.1\mingw53_32\include\QtANGLE -I..\..\..\software\Qt\5.9.1\mingw53_32\include\QtCore -Idebug -I. -I..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\win32-g++
LINKER = g++
LFLAGS = -Wl,-subsystem,windows -mthreads
LIBS = -lmingw32 -LD:\software\Qt\5.9.1\mingw53_32\lib D:\software\Qt\5.9.1\mingw53_32\lib\libqtmaind.a -LC:\utils\my_sql\my_sql\lib -LC:\utils\postgresql\pgsql\lib -lshell32 D:\software\Qt\5.9.1\mingw53_32\lib\libQt5Widgetsd.a D:\software\Qt\5.9.1\mingw53_32\lib\libQt5Guid.a D:\software\Qt\5.9.1\mingw53_32\lib\libQt5Cored.a
QMAKE = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe
IDC = idc
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
COPY = copy /y
SED = $(QMAKE) -install sed
COPY_FILE = copy /y
COPY_DIR = xcopy /s /q /y /i
DEL_FILE = del
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
INSTALL_FILE = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR = xcopy /s /q /y /i
QINSTALL = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe -install qinstall
QINSTALL_PROGRAM = D:\software\Qt\5.9.1\mingw53_32\bin\qmake.exe -install qinstall -exe
####### Output directory
OBJECTS_DIR = debug
####### Files
SOURCES = ..\SubwayTransferSystem\main.cpp \
..\SubwayTransferSystem\mainwindow.cpp \
..\SubwayTransferSystem\graphics_view_zoom.cpp \
..\SubwayTransferSystem\station.cpp \
..\SubwayTransferSystem\subwaygraph.cpp \
..\SubwayTransferSystem\managelines.cpp \
..\SubwayTransferSystem\apphelp.cpp debug\qrc_resource.cpp \
debug\moc_mainwindow.cpp \
debug\moc_graphics_view_zoom.cpp \
debug\moc_managelines.cpp \
debug\moc_apphelp.cpp
OBJECTS = debug/main.o \
debug/mainwindow.o \
debug/graphics_view_zoom.o \
debug/station.o \
debug/subwaygraph.o \
debug/managelines.o \
debug/apphelp.o \
debug/qrc_resource.o \
debug/moc_mainwindow.o \
debug/moc_graphics_view_zoom.o \
debug/moc_managelines.o \
debug/moc_apphelp.o
DIST = ..\SubwayTransferSystem\mainwindow.h \
..\SubwayTransferSystem\graphics_view_zoom.h \
..\SubwayTransferSystem\station.h \
..\SubwayTransferSystem\line.h \
..\SubwayTransferSystem\subwaygraph.h \
..\SubwayTransferSystem\managelines.h \
..\SubwayTransferSystem\apphelp.h ..\SubwayTransferSystem\main.cpp \
..\SubwayTransferSystem\mainwindow.cpp \
..\SubwayTransferSystem\graphics_view_zoom.cpp \
..\SubwayTransferSystem\station.cpp \
..\SubwayTransferSystem\subwaygraph.cpp \
..\SubwayTransferSystem\managelines.cpp \
..\SubwayTransferSystem\apphelp.cpp
QMAKE_TARGET = SubwayTransferSystem
DESTDIR = debug\ #avoid trailing-slash linebreak
TARGET = SubwayTransferSystem.exe
DESTDIR_TARGET = debug\SubwayTransferSystem.exe
####### Build rules
first: all
all: Makefile.Debug $(DESTDIR_TARGET)
$(DESTDIR_TARGET): ui_mainwindow.h ui_managelines.h $(OBJECTS)
$(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) object_script.SubwayTransferSystem.Debug $(LIBS)
qmake: FORCE
@$(QMAKE) -o Makefile.Debug ..\SubwayTransferSystem\SubwayTransferSystem.pro -spec win32-g++
qmake_all: FORCE
dist:
$(ZIP) SubwayTransferSystem.zip $(SOURCES) $(DIST) ..\SubwayTransferSystem\SubwayTransferSystem.pro ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\features\spec_pre.prf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\qdevice.pri ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\features\device_config.prf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\common\g++-base.conf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\common\angle.conf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\common\sanitize.conf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\common\gcc-base.conf ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\qconfig.pri ..\..\..\software\Qt\5.9.1\mingw53_32\mkspecs\modules\qt_lib_
gitextract_5p2saq3a/ ├── README.md ├── SubwayTransferSystem/ │ ├── SubwayTransferSystem.pro │ ├── SubwayTransferSystem.pro.user │ ├── apphelp.cpp │ ├── apphelp.h │ ├── data/ │ │ ├── demo.txt │ │ ├── outLine.txt │ │ └── subwayLine.txt │ ├── graphics_view_zoom.cpp │ ├── graphics_view_zoom.h │ ├── html/ │ │ ├── helpAddByText.html │ │ ├── helpAddConnection.html │ │ ├── helpAddLine.html │ │ ├── helpAddStation.html │ │ ├── helpTransfer.html │ │ └── helpWatch.html │ ├── line.h │ ├── main.cpp │ ├── mainwindow.cpp │ ├── mainwindow.h │ ├── mainwindow.ui │ ├── managelines.cpp │ ├── managelines.h │ ├── managelines.ui │ ├── myview.cpp │ ├── myview.h │ ├── querytransfer.cpp │ ├── querytransfer.h │ ├── querytransfer.ui │ ├── resource.qrc │ ├── station.cpp │ ├── station.h │ ├── subwaygraph.cpp │ └── subwaygraph.h ├── build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/ │ ├── .qmake.stash │ ├── Makefile │ ├── Makefile.Debug │ ├── Makefile.Release │ ├── object_script.SubwayTransferSystem.Debug │ ├── object_script.SubwayTransferSystem.Release │ ├── release/ │ │ ├── apphelp.o │ │ ├── graphics_view_zoom.o │ │ ├── main.o │ │ ├── mainwindow.o │ │ ├── managelines.o │ │ ├── moc_apphelp.cpp │ │ ├── moc_apphelp.o │ │ ├── moc_graphics_view_zoom.cpp │ │ ├── moc_graphics_view_zoom.o │ │ ├── moc_mainwindow.cpp │ │ ├── moc_mainwindow.o │ │ ├── moc_managelines.cpp │ │ ├── moc_managelines.o │ │ ├── moc_predefs.h │ │ ├── qrc_resource.cpp │ │ ├── qrc_resource.o │ │ ├── station.o │ │ ├── subwaygraph.o │ │ └── translations/ │ │ ├── qt_bg.qm │ │ ├── qt_ca.qm │ │ ├── qt_cs.qm │ │ ├── qt_da.qm │ │ ├── qt_de.qm │ │ ├── qt_en.qm │ │ ├── qt_es.qm │ │ ├── qt_fi.qm │ │ ├── qt_fr.qm │ │ ├── qt_gd.qm │ │ ├── qt_he.qm │ │ ├── qt_hu.qm │ │ ├── qt_it.qm │ │ ├── qt_ja.qm │ │ ├── qt_ko.qm │ │ ├── qt_lv.qm │ │ ├── qt_pl.qm │ │ ├── qt_ru.qm │ │ ├── qt_sk.qm │ │ └── qt_uk.qm │ ├── ui_mainwindow.h │ └── ui_managelines.h ├── dealData/ │ ├── line.txt │ ├── main.cpp │ ├── outLine.txt │ └── readme.md ├── osmXmlParser/ │ ├── readme.md │ ├── route.osm │ ├── src/ │ │ └── osmXmlParser/ │ │ └── MyOsmParser.java │ ├── station.osm │ ├── station.txt │ └── subwayLine.osm └── 设计说明书.docx
SYMBOL INDEX (52 symbols across 21 files)
FILE: SubwayTransferSystem/apphelp.h
function class (line 10) | class AppHelp : public QWidget
FILE: SubwayTransferSystem/graphics_view_zoom.h
function class (line 38) | class Graphics_view_zoom : public QObject {
FILE: SubwayTransferSystem/line.h
type QPair (line 11) | typedef QPair<int,int> Edge;
function class (line 17) | class Line
FILE: SubwayTransferSystem/main.cpp
function main (line 6) | int main(int argc, char *argv[])
FILE: SubwayTransferSystem/mainwindow.cpp
function QColor (line 122) | QColor MainWindow::getLinesColor(const QList<int>& linesList)
function QString (line 137) | QString MainWindow::getLinesName(const QList<int>& linesList)
function QPointF (line 151) | QPointF MainWindow::transferCoord(QPointF coord)
FILE: SubwayTransferSystem/mainwindow.h
function namespace (line 14) | namespace Ui {
function class (line 18) | class MainWindow : public QMainWindow
FILE: SubwayTransferSystem/managelines.h
function namespace (line 14) | namespace Ui {
function class (line 18) | class ManageLines : public QDialog
FILE: SubwayTransferSystem/querytransfer.h
function namespace (line 6) | namespace Ui {
function class (line 10) | class QueryTransfer : public QDialog
FILE: SubwayTransferSystem/station.cpp
function rad (line 5) | double rad(double d)
function calcuDistance (line 12) | int calcuDistance(double fLati1, double fLong1, double fLati2, double fL...
FILE: SubwayTransferSystem/station.h
function class (line 12) | class Station
FILE: SubwayTransferSystem/subwaygraph.cpp
function QColor (line 147) | QColor SubwayGraph::getLineColor(int l)
function QString (line 153) | QString SubwayGraph::getLineName(int l)
function QPointF (line 226) | QPointF SubwayGraph::getMinCoord()
function QPointF (line 232) | QPointF SubwayGraph::getMaxCoord()
function QString (line 250) | QString SubwayGraph::getStationName(int s)
function QPointF (line 256) | QPointF SubwayGraph::getStationCoord(int s)
FILE: SubwayTransferSystem/subwaygraph.h
function class (line 12) | class Node{
function class (line 30) | class SubwayGraph
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_apphelp.cpp
function QT_BEGIN_MOC_NAMESPACE (line 20) | QT_BEGIN_MOC_NAMESPACE
function QMetaObject (line 84) | const QMetaObject *AppHelp::metaObject() const
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_graphics_view_zoom.cpp
function QT_BEGIN_MOC_NAMESPACE (line 20) | QT_BEGIN_MOC_NAMESPACE
function QMetaObject (line 94) | const QMetaObject *Graphics_view_zoom::metaObject() const
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_mainwindow.cpp
function QT_BEGIN_MOC_NAMESPACE (line 20) | QT_BEGIN_MOC_NAMESPACE
function QMetaObject (line 196) | const QMetaObject *MainWindow::metaObject() const
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_managelines.cpp
function QT_BEGIN_MOC_NAMESPACE (line 20) | QT_BEGIN_MOC_NAMESPACE
function QMetaObject (line 112) | const QMetaObject *ManageLines::metaObject() const
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/qrc_resource.cpp
type QT_NAMESPACE (line 3718) | namespace QT_NAMESPACE {
type initializer (line 3746) | struct initializer {
method initializer (line 3747) | initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_resource)(); }
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/ui_mainwindow.h
function QT_BEGIN_NAMESPACE (line 34) | QT_BEGIN_NAMESPACE
function namespace (line 580) | namespace Ui {
FILE: build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/ui_managelines.h
function QT_BEGIN_NAMESPACE (line 29) | QT_BEGIN_NAMESPACE
function namespace (line 318) | namespace Ui {
FILE: dealData/main.cpp
function dealData (line 8) | void dealData() {
function main (line 45) | int main() {
FILE: osmXmlParser/src/osmXmlParser/MyOsmParser.java
class Station (line 17) | class Station{
method Station (line 24) | Station (String i, String n, String e, String la, String lo){
method equals (line 32) | @Override
class Route (line 42) | class Route{
method Route (line 52) | Route(){
class MyOsmParser (line 57) | public class MyOsmParser {
method MyOsmParser (line 62) | MyOsmParser(){
method parseStation (line 67) | public void parseStation(){
method parseRoute (line 110) | public void parseRoute(){
method main (line 189) | public static void main(String[] args) {
Condensed preview — 91 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,028K chars).
[
{
"path": "README.md",
"chars": 2568,
"preview": "## 上海地铁换乘指南系统(SubwayTransferSystem)\n\n#### 简介\n本项目是在2017年暑期所写的上海地铁换乘指南系统,是从零学QT,在两周左右无借鉴任何相同或相似程序全部由自己一人完成的小项目。\n\n个人觉得还是非常用"
},
{
"path": "SubwayTransferSystem/SubwayTransferSystem.pro",
"chars": 1305,
"preview": "#-------------------------------------------------\n#\n# Project created by QtCreator 2017-08-03T12:33:22\n#\n#-------------"
},
{
"path": "SubwayTransferSystem/SubwayTransferSystem.pro.user",
"chars": 23618,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.3.1, 2017-08-22T18:44:29."
},
{
"path": "SubwayTransferSystem/apphelp.cpp",
"chars": 2982,
"preview": "#include \"apphelp.h\"\n#include <QIcon>\n\n#include <QDesktopWidget>\n#include <QRect>\n#include <QPoint>\n#include <QHBoxLayou"
},
{
"path": "SubwayTransferSystem/apphelp.h",
"chars": 467,
"preview": "#ifndef APPHELP_H\n#define APPHELP_H\n\n#include <QWidget>\n#include <QPushButton>\n#include <QTextBrowser>\n#include <QStacke"
},
{
"path": "SubwayTransferSystem/data/demo.txt",
"chars": 365,
"preview": "id: 5\nname: 5号线\ncolour: #9253B2\nfromTo: 莘庄 闵行开发区\ntotalStations: 11\n1 莘庄\t121.385379,31.111193\n2 春申路\t121.385937,31.098112"
},
{
"path": "SubwayTransferSystem/data/outLine.txt",
"chars": 12982,
"preview": "id: 1\nname: 1号线\ncolour: #E70012\nfromTo: 富锦路 莘庄\ntotalStations: 28\n1 富锦路\t121.424661,31.39226\n2 友谊西路\t121.427726,31.381227\n"
},
{
"path": "SubwayTransferSystem/data/subwayLine.txt",
"chars": 15734,
"preview": "id: 1\nname: 1号线\ncolour: #E70012\nfrom: 富锦路\nto: 莘庄\ntotalStation: 28\n2584702105\t富锦路\t31.3933626\t121.4200409\n3800583782\t友谊西路"
},
{
"path": "SubwayTransferSystem/graphics_view_zoom.cpp",
"chars": 1905,
"preview": "#include \"graphics_view_zoom.h\"\n#include <QMouseEvent>\n#include <QApplication>\n#include <QScrollBar>\n#include <qmath.h>\n"
},
{
"path": "SubwayTransferSystem/graphics_view_zoom.h",
"chars": 1927,
"preview": "#ifndef GRAPHICS_VIEW_ZOOM_H\n#define GRAPHICS_VIEW_ZOOM_H\n\n#include <QObject>\n#include <QGraphicsView>\n\n/*!\n * This clas"
},
{
"path": "SubwayTransferSystem/html/helpAddByText.html",
"chars": 155,
"preview": "<h3>文本方式简易添加方法</h3>\n<br>\n<br>\n\t点击 <img height=24 weight=24 src=\":/icon/icon/text.png\"> , 以文本方式快捷添加线路、站点、连接关系;\n<br>\n<p>\n"
},
{
"path": "SubwayTransferSystem/html/helpAddConnection.html",
"chars": 210,
"preview": "<h3>新增站点连接方法</h3>\n<br>\n<br>\n\t点击 <img height=24 weight=24 src=\":/icon/icon/connect.png\"> , 添加连接;\n<br>\n<p>\n\t1.先添加新线路信息;\n\t"
},
{
"path": "SubwayTransferSystem/html/helpAddLine.html",
"chars": 207,
"preview": "<h3>新增线路方法</h3>\n<br>\n<br>\n\t点击 <img height=24 weight=24 src=\":/icon/icon/subway.png\"> , 添加线路;\n<br>\n<p>\n\t1.先添加新线路信息;\n\t<br"
},
{
"path": "SubwayTransferSystem/html/helpAddStation.html",
"chars": 208,
"preview": "<h3>新增站点方法</h3>\n<br>\n<br>\n\t点击 <img height=24 weight=24 src=\":/icon/icon/station.png\"> , 添加站点;\n<br>\n<p>\n\t1.先添加新线路信息;\n\t<b"
},
{
"path": "SubwayTransferSystem/html/helpTransfer.html",
"chars": 302,
"preview": "<h3>地铁换乘指南</h3>\n<br>\n<p>\n\t视图右侧为换乘指南,选择相应线路站点即可换乘;\n\t<br>\n\t选择方式有;<strong>“最短时间”</strong>和;<strong>“最少换乘”</strong>;\n\t<br>\n"
},
{
"path": "SubwayTransferSystem/html/helpWatch.html",
"chars": 454,
"preview": "<h3>查看地铁网络线路图</h3>\n<br>\n<p>\n\t地铁线路图根据上海现有地铁站的地理<strong>经纬度</strong>数据显现出来;\n\t<br>\n\t每条线路有不同的颜色,重叠的线路为颜色叠加显示,效果为<strong>正片叠"
},
{
"path": "SubwayTransferSystem/line.h",
"chars": 683,
"preview": "#ifndef LINE_H\n#define LINE_H\n\n#include <QString>\n#include <QColor>\n#include <QPair>\n#include <QSet>\n#include <QVector>\n"
},
{
"path": "SubwayTransferSystem/main.cpp",
"chars": 393,
"preview": "#include \"mainwindow.h\"\n#include <QApplication>\n#include <QSplashScreen>\n#include <QDesktopWidget>\n\nint main(int argc, c"
},
{
"path": "SubwayTransferSystem/mainwindow.cpp",
"chars": 18546,
"preview": "#include \"ui_mainwindow.h\"\n#include \"ui_managelines.h\"\n#include \"mainwindow.h\"\n\n#include <QGraphicsItem>\n#include <QMess"
},
{
"path": "SubwayTransferSystem/mainwindow.h",
"chars": 2879,
"preview": "#ifndef MAINWINDOW_H\n#define MAINWINDOW_H\n\n#include \"graphics_view_zoom.h\"\n#include \"subwaygraph.h\"\n#include \"manageline"
},
{
"path": "SubwayTransferSystem/mainwindow.ui",
"chars": 22109,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MainWindow</class>\n <widget class=\"QMainWindow\" name=\""
},
{
"path": "SubwayTransferSystem/managelines.cpp",
"chars": 5829,
"preview": "#include \"ui_managelines.h\"\n#include \"managelines.h\"\n\n#include <QPixmap>\n#include <QColorDialog>\n#include <QFile>\n#inclu"
},
{
"path": "SubwayTransferSystem/managelines.h",
"chars": 1879,
"preview": "#ifndef MANAGELINES_H\n#define MANAGELINES_H\n\n#include <QDialog>\n#include <QVector>\n#include <QTabWidget>\n#include <QList"
},
{
"path": "SubwayTransferSystem/managelines.ui",
"chars": 18985,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ManageLines</class>\n <widget class=\"QDialog\" name=\"Man"
},
{
"path": "SubwayTransferSystem/myview.cpp",
"chars": 604,
"preview": "#include \"myview.h\"\n\nMyView::MyView(QWidget *parent) : QGraphicsView(parent)\n{\n// setHorizontalScrollBarPolicy(Qt::Sc"
},
{
"path": "SubwayTransferSystem/myview.h",
"chars": 386,
"preview": "#ifndef MYVIEW_H\n#define MYVIEW_H\n\n#include <QGraphicsView>\n#include <QWheelEvent>\n#include <QGraphicsItem>\n\nclass MyVie"
},
{
"path": "SubwayTransferSystem/querytransfer.cpp",
"chars": 236,
"preview": "#include \"querytransfer.h\"\n#include \"ui_querytransfer.h\"\n\nQueryTransfer::QueryTransfer(QWidget *parent) :\n QDialog(pa"
},
{
"path": "SubwayTransferSystem/querytransfer.h",
"chars": 306,
"preview": "#ifndef QUERYTRANSFER_H\n#define QUERYTRANSFER_H\n\n#include <QDialog>\n\nnamespace Ui {\nclass QueryTransfer;\n}\n\nclass QueryT"
},
{
"path": "SubwayTransferSystem/querytransfer.ui",
"chars": 7262,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>QueryTransfer</class>\n <widget class=\"QDialog\" name=\"Q"
},
{
"path": "SubwayTransferSystem/resource.qrc",
"chars": 1045,
"preview": "<RCC>\n <qresource prefix=\"/icon\">\n <file>icon/enlarge.png</file>\n <file>icon/shrink.png</file>\n "
},
{
"path": "SubwayTransferSystem/station.cpp",
"chars": 1090,
"preview": "#include \"station.h\"\n#include <math.h>\n\n// 角度转弧度\ndouble rad(double d)\n{\n const double PI = 3.1415926535898;\n retur"
},
{
"path": "SubwayTransferSystem/station.h",
"chars": 689,
"preview": "#ifndef STATION_H\n#define STATION_H\n\n#include <QString>\n#include <QPointF>\n#include <QSet>\n\nclass SubwayGraph;\nclass QTe"
},
{
"path": "SubwayTransferSystem/subwaygraph.cpp",
"chars": 10094,
"preview": "#include \"subwaygraph.h\"\n#include <QFile>\n#include <QTextStream>\n#include <QDebug>\n#include <queue>\n\n//构造函数\nSubwayGraph:"
},
{
"path": "SubwayTransferSystem/subwaygraph.h",
"chars": 2487,
"preview": "#ifndef SUBWAYGRAPH_H\n#define SUBWAYGRAPH_H\n\n#include \"station.h\"\n#include \"line.h\"\n#include <QString>\n#include <QPoint>"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/.qmake.stash",
"chars": 1012,
"preview": "QMAKE_CXX.INCDIRS = \\\n D:/software/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include \\\n D:/software/Qt/T"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/Makefile",
"chars": 27837,
"preview": "#############################################################################\n# Makefile for building: SubwayTransferSys"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/Makefile.Debug",
"chars": 125424,
"preview": "#############################################################################\n# Makefile for building: SubwayTransferSys"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/Makefile.Release",
"chars": 125648,
"preview": "#############################################################################\n# Makefile for building: SubwayTransferSys"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/object_script.SubwayTransferSystem.Debug",
"chars": 284,
"preview": "INPUT(\n./debug\\main.o\n./debug\\mainwindow.o\n./debug\\graphics_view_zoom.o\n./debug\\station.o\n./debug\\subwaygraph.o\n./debug\\"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/object_script.SubwayTransferSystem.Release",
"chars": 308,
"preview": "INPUT(\n./release\\main.o\n./release\\mainwindow.o\n./release\\graphics_view_zoom.o\n./release\\station.o\n./release\\subwaygraph."
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_apphelp.cpp",
"chars": 3463,
"preview": "/****************************************************************************\n** Meta object code from reading C++ file "
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_graphics_view_zoom.cpp",
"chars": 4060,
"preview": "/****************************************************************************\n** Meta object code from reading C++ file "
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_mainwindow.cpp",
"chars": 8655,
"preview": "/****************************************************************************\n** Meta object code from reading C++ file "
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_managelines.cpp",
"chars": 5153,
"preview": "/****************************************************************************\n** Meta object code from reading C++ file "
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/moc_predefs.h",
"chars": 9616,
"preview": "#define __DBL_MIN_EXP__ (-1021)\n#define __cpp_attributes 200809\n#define __pentiumpro__ 1\n#define __UINT_LEAST16_MAX__ 0x"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/qrc_resource.cpp",
"chars": 287004,
"preview": "/****************************************************************************\n** Resource object code\n**\n** Created by: "
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/ui_mainwindow.h",
"chars": 27741,
"preview": "/********************************************************************************\n** Form generated from reading UI file"
},
{
"path": "build-SubwayTransferSystem-Desktop_Qt_5_9_1_MinGW_32bit-Release/ui_managelines.h",
"chars": 19710,
"preview": "/********************************************************************************\n** Form generated from reading UI file"
},
{
"path": "dealData/line.txt",
"chars": 1245,
"preview": "Ϻ1 · · · ´ · ͨ´ · ´ ˮ· ϺϷ ӳ· ɽ· Ϻվ · բ· 㳡 · · · ɽ· һ Ϻ · Ϻվ · · ݷׯ\nϺ2 ֶʻ · Զ · ɳ Ķ· · · · Ž߿ · ϺƼ ʹ · ½ Ͼ· 㳡 Ͼ· "
},
{
"path": "dealData/main.cpp",
"chars": 912,
"preview": "#include <iostream>\n#include <fstream>\n#include <sstream>\n#include <string>\n#include <vector>\nusing namespace std;\n\nvoid"
},
{
"path": "dealData/outLine.txt",
"chars": 3388,
"preview": "id: 1\nname: 1\nfromTo: · ݷׯ\ntotalStations: 28\n1 ·\n2 ·\n3 ·\n4 ´\n5 ·\n6 ͨ´\n7 ·\n8 ´\n9 ˮ·\n10 ϺϷ\n11 ӳ·\n12 ɽ·\n13 Ϻվ\n14 ·\n15 բ·\n16"
},
{
"path": "dealData/readme.md",
"chars": 1281,
"preview": "### 获取数据模块\n\n本程序将线路数据进行规整,以便SubwayTransferSystem中使用,结果在outLine.txt文件中,最终文件在[SubwayTransferSystem/data/outLine.txt](https:"
},
{
"path": "osmXmlParser/readme.md",
"chars": 1796,
"preview": "### 获取数据模块\n\n#### 数据来源\n\n[Open Street Map](https://www.openstreetmap.org/#map=5/47.725/21.138) \nOSM是一款由网络大众共同打造的免费开源、可编辑"
},
{
"path": "osmXmlParser/route.osm",
"chars": 70003,
"preview": "<?xml version='1.0' encoding='UTF-8'?>\n<osm version=\"0.6\" generator=\"Osmosis 0.45\">\n <bounds minlon=\"120.69850\" minlat="
},
{
"path": "osmXmlParser/src/osmXmlParser/MyOsmParser.java",
"chars": 5339,
"preview": "package osmXmlParser;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.I"
},
{
"path": "osmXmlParser/station.osm",
"chars": 229276,
"preview": "<?xml version='1.0' encoding='UTF-8'?>\n<osm version=\"0.6\" generator=\"Osmosis 0.45\">\n <bounds minlon=\"120.69850\" minlat="
},
{
"path": "osmXmlParser/station.txt",
"chars": 27680,
"preview": "29583117\tݷׯ\t31.1110347\t121.3798759\n266072852\tƽ·\t31.2629428\t121.4964404\n266073071\t·\t31.2609506\t121.4853185\n267197150\tʹ\t31"
},
{
"path": "osmXmlParser/subwayLine.osm",
"chars": 687136,
"preview": "<?xml version='1.0' encoding='UTF-8'?>\n<osm version=\"0.6\" generator=\"Osmosis 0.45\">\n <bounds minlon=\"120.69850\" minlat="
}
]
// ... and 33 more files (download for full content)
About this extraction
This page contains the full source code of the BaiJiazm/SubwayTransferSystem GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 91 files (1.7 MB), approximately 812.0k tokens, and a symbol index with 52 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.