1. //MainWidget.h
  2.  
  3. #ifndef MAINWINDOW_H
  4. #define MAINWINDOW_H
  5.  
  6. #include <QMainWindow>
  7. #include "mapwidget.h"
  8. #include <QToolButton>
  9. #include <QGraphicsLineItem>
  10. #include <QGraphicsScene>
  11. #include <QGraphicsView>
  12. #include <QLabel>
  13. #include <QComboBox>
  14. #include <QSpinBox>
  15. #include <QTextEdit>
  16. #include <QPainter>
  17. #include <QVector>
  18.  
  19. class MainWindow : public QMainWindow
  20. {
  21. Q_OBJECT
  22. public:
  23. MainWindow(QWidget *parent = );
  24. ~MainWindow();
  25. void createToolBar();
  26. void paintEvent (QPaintEvent *);
  27. void setStart(int X, int Y);
  28. void setEnd(int X, int Y);
  29. void setNextPos (int index);
  30. void initScene();
  31. public slots:
  32. void setStartStation();
  33. void setEndStation();
  34. void FindPath();
  35. void Clear();
  36. private:
  37. MapWidget *mapWidget;
  38. QLabel *startLabel;
  39. QLabel *endLabel;
  40. QComboBox *startComboBox;
  41. QComboBox *endComboBox;
  42. QToolButton *findPathBtn;
  43. QToolButton *clearBtn;
  44.  
  45. QGraphicsScene *scene;
  46. QGraphicsView *view;
  47.  
  48. int startX, startY, endX, endY;
  49. QVector<int> nextPath;
  50.  
  51. struct ArcCell{ //弧信息
  52. int adj; //对无权图有1,0表示是否相邻,对带权图,则为权值类型
  53. // string info; //该弧的相关信息
  54. };
  55.  
  56. //内部类
  57. static const int MAX_VERTEX_NUM = ;
  58. static const int INF = ;
  59.  
  60. struct MGraph{
  61. QVector<int> vexs; //顶点集合
  62. //临接矩阵
  63. ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
  64. int vexnum; //顶点数
  65. int arcnum; //边数
  66. // int kind; //图的类型
  67. };
  68.  
  69. class DijkstraFindPath
  70. {
  71. public:
  72. DijkstraFindPath();
  73. MGraph mgraph;
  74. void CreateGraph();
  75. // void ShortestPath(int v0, PathMatrix &path, ShortPathTable &DP, int prev[]);
  76. int prev[MAX_VERTEX_NUM]; //最短路上的前驱顶点
  77. int d[MAX_VERTEX_NUM]; //表示边e = (u,v)的权值(不存在时为INF,不过d[i][i]=0)
  78. bool used[MAX_VERTEX_NUM]; //已经使用过的图
  79. void dijkstra(int startPos); //求从起点startPos出发到各个顶点的最短距离
  80. QVector<int> get_Path(int endPos);//到顶点endPos的最短路
  81. };
  82.  
  83. DijkstraFindPath *dj;
  84. };
  85.  
  86. #endif // MAINWINDOW_H
  1. //MainWidget.cpp
  2. //最短路径算法,和界面的实现
  3.  
  4. #include "mainwindow.h"
  5. #include <qdebug.h>
  6. #include <QToolBar>
  7. #include <QtAlgorithms>
  8. #include <iostream>
  9.  
  10. MainWindow::MainWindow(QWidget *parent)
  11. : QMainWindow(parent)
  12. {
  13. // mapWidget = new MapWidget;
  14. // painter = new QPainter();
  15. dj = new MainWindow::DijkstraFindPath();
  16. dj->CreateGraph ();
  17.  
  18. scene = new QGraphicsScene;
  19. scene->setSceneRect (-, -, , );
  20. initScene();
  21.  
  22. view = new QGraphicsView;
  23. view->setScene (scene);
  24. view->setMinimumSize (, );
  25. view->show ();
  26. setCentralWidget (view);
  27.  
  28. createToolBar (); //实现一个工具栏
  29. // setCentralWidget (mapWidget);
  30. // setMinimumSize (600, 400); //设置最小尺寸
  31. }
  32.  
  33. MainWindow::DijkstraFindPath::DijkstraFindPath()
  34. {
  35. mgraph.vexnum = ; //初始化点数目
  36. for (int i = ; i < mgraph.vexnum; i++) //初始化点编号
  37. mgraph.vexs.push_back (i);
  38. mgraph.arcnum = ; //暂定
  39. for (int i = ; i < mgraph.vexnum; i++) {
  40. for (int j = ; j < mgraph.vexnum; j++) {
  41. if (i == j)
  42. mgraph.arcs[i][j].adj = ;
  43. else
  44. mgraph.arcs[i][j].adj = INF;
  45. // mgraph.arcs[i][j].info = "";
  46. }
  47. }
  48. }
  49.  
  50. void MainWindow::DijkstraFindPath::CreateGraph ()
  51. {
  52. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //6 - 5
  53. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //6 - 10
  54. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //5 - 4
  55. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //4 - 3
  56. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //3 - 2
  57. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //3 - 22
  58. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //2 - 1
  59. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//23 - 22
  60. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //6 - 23
  61. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //23 - 4
  62. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //1 - 一食堂
  63. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//一食堂-操场
  64. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//一食堂-祁通1
  65. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//祁通1-祁通2(路口)
  66. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //一食堂-岔路口
  67. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //岔路-7
  68. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//一食堂到岔路(通向7号楼的)
  69. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//岔路-祁通大道
  70. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//祁通大道-图书馆
  71. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//祁通大道-祁通2
  72. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//祁通2-方肇周
  73. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //西大门-祁通1
  74. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//祁通1-祁通2
  75. // mgraph.arcs[25][12].adj = mgraph.arcs[12][25].adj = 108; //西大门-西操
  76. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //1 - 操场
  77. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //10 - 9
  78. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //9 - 8
  79. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //8 - 7
  80. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //7 - 图书馆
  81. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //10 - 13
  82. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//13 - 12
  83. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//13 - 16
  84. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//12 - 15
  85. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//16 - 15
  86. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//15 - 14
  87. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//16 - 19
  88. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //19 - 18
  89. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //18 - 17
  90. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//14 - 17
  91. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //17 - 二超
  92. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ; //二超 - 二食堂
  93. mgraph.arcs[][].adj = mgraph.arcs[][].adj = ;//二食堂-图书馆
  94.  
  95. //以下处理细节
  96.  
  97. mgraph.arcnum = ;
  98. }
  99.  
  100. void MainWindow::DijkstraFindPath::dijkstra (int startPos)
  101. {
  102. for (int i = ; i < mgraph.vexnum; i++) d[i] = INF;
  103. for (int i = ; i < mgraph.vexnum; i++) used[i] = false;
  104. for (int i = ; i < mgraph.vexnum; i++) prev[i] = -;
  105. d[startPos] = ;
  106.  
  107. while (true) {
  108. int v = -;
  109. for (int u = ; u < mgraph.vexnum; u++) {
  110. if (!used[u] && (v == - || d[u] < d[v])) v = u;
  111. }
  112.  
  113. if (v == -) break;
  114. used[v] = true;
  115.  
  116. for (int u = ; u < mgraph.vexnum; u++) {
  117. if (d[u] > d[v] + mgraph.arcs[v][u].adj) {
  118. d[u] = d[v] + mgraph.arcs[v][u].adj;
  119. prev[u] = v;
  120. }
  121. }
  122. }
  123. }
  124.  
  125. QVector<int> MainWindow::DijkstraFindPath::get_Path (int endPos)
  126. {
  127. QVector<int> path;
  128.  
  129. for ( ; endPos != -; endPos = prev[endPos]) {
  130. // std::cout << "EndPos: " << endPos << ", ";
  131. path.push_back (endPos);
  132. }
  133.  
  134. std::reverse(path.begin (), path.end ());
  135.  
  136. return path;
  137. }
  138.  
  139. void MainWindow::initScene ()
  140. {
  141. QGraphicsPixmapItem *item =
  142. scene->addPixmap (QPixmap("NanTong.jpg"));
  143. // item->setFlag (QGraphicsItem::ItemIsMovable);
  144. item->setPos (-, -);
  145. }
  146.  
  147. MainWindow::~MainWindow()
  148. {
  149.  
  150. }
  151.  
  152. void MainWindow::createToolBar ()
  153. {
  154. QToolBar *toolBar = addToolBar ("Tool");
  155. startLabel = new QLabel(tr("起点: "));
  156. startComboBox = new QComboBox;
  157. startComboBox->addItem (tr("公寓6号楼")); //
  158. startComboBox->addItem (tr("公寓5号楼")); //
  159. startComboBox->addItem (tr("公寓4号楼")); //
  160. startComboBox->addItem (tr("公寓3号楼")); //
  161. startComboBox->addItem (tr("公寓2号楼")); //
  162. startComboBox->addItem (tr("公寓1号楼")); //
  163.  
  164. startComboBox->addItem (tr("公寓10号楼")); //
  165. startComboBox->addItem (tr("公寓9号楼")); //
  166. startComboBox->addItem (tr("公寓8号楼")); //
  167. startComboBox->addItem (tr("公寓7号楼")); //
  168. startComboBox->addItem (tr("图书馆")); //
  169. startComboBox->addItem (tr("一食堂")); startComboBox->addItem (tr("西操场")); //11 12
  170. startComboBox->addItem (tr("公寓23号楼")); startComboBox->addItem (tr("公寓13号楼")); //13 14
  171. startComboBox->addItem (tr("公寓22号楼")); startComboBox->addItem (tr("公寓12号楼")); //15 16
  172. startComboBox->addItem (tr("公寓楼16")); startComboBox->addItem (tr("公寓楼15")); //17 18
  173. startComboBox->addItem (tr("公寓楼14")); startComboBox->addItem (tr("公寓楼19")); //19 20
  174. startComboBox->addItem (tr("公寓楼18")); startComboBox->addItem (tr("公寓楼17")); //21 22
  175. startComboBox->addItem (tr("二超")); startComboBox->addItem (tr("二食堂")); //23 24
  176. startComboBox->addItem (tr("西大门")); startComboBox->addItem (tr("方肇周教学楼")); //25 26
  177.  
  178. endLabel = new QLabel(tr("\t终点: "));
  179.  
  180. endComboBox = new QComboBox;
  181. endComboBox->addItem (tr("公寓6号楼"));
  182. endComboBox->addItem (tr("公寓5号楼"));
  183. endComboBox->addItem (tr("公寓4号楼"));
  184. endComboBox->addItem (tr("公寓3号楼"));
  185. endComboBox->addItem (tr("公寓2号楼"));
  186. endComboBox->addItem (tr("公寓1号楼"));
  187. endComboBox->addItem (tr("公寓10号楼"));
  188. endComboBox->addItem (tr("公寓9号楼"));
  189. endComboBox->addItem (tr("公寓8号楼"));
  190. endComboBox->addItem (tr("公寓7号楼"));
  191. endComboBox->addItem (tr("图书馆"));
  192. endComboBox->addItem (tr("一食堂")); endComboBox->addItem (tr("西操场"));
  193. endComboBox->addItem (tr("公寓23号楼"));endComboBox->addItem (tr("公寓13号楼"));
  194. endComboBox->addItem (tr("公寓22号楼"));endComboBox->addItem (tr("公寓12号楼"));
  195. endComboBox->addItem (tr("公寓楼16")); endComboBox->addItem (tr("公寓楼15"));
  196. endComboBox->addItem (tr("公寓楼14")); endComboBox->addItem (tr("公寓楼19"));
  197. endComboBox->addItem (tr("公寓楼18")); endComboBox->addItem (tr("公寓楼17"));
  198. endComboBox->addItem (tr("二超")); endComboBox->addItem (tr("二食堂"));
  199. endComboBox->addItem (tr("西大门")); endComboBox->addItem (tr("方肇周教学楼"));
  200.  
  201. connect (startComboBox, SIGNAL(activated(int)), this, SLOT(setStartStation()));
  202. connect (endComboBox, SIGNAL(activated(int)), this, SLOT(setEndStation()));
  203.  
  204. findPathBtn = new QToolButton;
  205. findPathBtn->setText (tr("\t\t绘制最短路径"));
  206.  
  207. connect (findPathBtn, SIGNAL(clicked(bool)), this, SLOT(FindPath()));
  208.  
  209. clearBtn = new QToolButton;
  210. clearBtn->setText (tr("\t\t清除"));
  211.  
  212. connect (clearBtn, SIGNAL(clicked(bool)), this, SLOT(Clear()));
  213.  
  214. toolBar->addWidget (startLabel);
  215. toolBar->addWidget (startComboBox);
  216. toolBar->addWidget (endLabel);
  217. toolBar->addWidget (endComboBox);
  218. toolBar->addWidget (findPathBtn);
  219. toolBar->addWidget (clearBtn);
  220. }
  221.  
  222. void MainWindow::setStart(int X, int Y) {
  223. startX = X; startY = Y;
  224. // qDebug() << X << ", " << Y;
  225. }
  226.  
  227. void MainWindow::setEnd (int X, int Y)
  228. {
  229. endX = X; endY = Y;
  230. }
  231.  
  232. void MainWindow::setStartStation ()
  233. {
  234. switch (startComboBox->currentIndex ()) {
  235. case :
  236. setStart(-, -); break;
  237. case :
  238. setStart (-, -); break;
  239. case :
  240. setStart (-, -); break;
  241. case :
  242. setStart (-, -); break;
  243. case :
  244. setStart (-, -); break;
  245. case :
  246. setStart (-, -); break;
  247. case :
  248. setStart (-, -); break;
  249. case :
  250. setStart (-, -); break;
  251. case :
  252. setStart(-, -); break;
  253. case :
  254. setStart (-, -); break;
  255. case :
  256. setStart (-, -); break;
  257. case :
  258. setStart (-, -); break;
  259. case :
  260. setStart (-, -); break;
  261. case :
  262. setStart (-, -); break;
  263. case :
  264. setStart (-, -); break;
  265. case :
  266. setStart (-, -); break;
  267. case :
  268. setStart (-, -); break;
  269. case :
  270. setStart (-, -); break;
  271. case :
  272. setStart (-, -); break;
  273. case :
  274. setStart (-, -); break;
  275. case :
  276. setStart (-, -); break;
  277. case :
  278. setStart (-, -); break;
  279. case :
  280. setStart (-, -); break;
  281. case :
  282. setStart (-, -); break;
  283. case :
  284. setStart (-, -); break;
  285. case :
  286. setStart (-, -); break;
  287. case :
  288. setStart (-, -); break;
  289. case :
  290. setStart (-, -); break;
  291. case :
  292. setStart (-, -); break;
  293. case :
  294. setStart (-, -); break;
  295. case :
  296. setStart (-, -); break;
  297. default:
  298. break;
  299. }
  300. }
  301.  
  302. void MainWindow::setEndStation ()
  303. {
  304. switch (endComboBox->currentIndex ()) {
  305. case :
  306. setEnd(-, -); break;
  307. case :
  308. setEnd (-, -); break;
  309. case :
  310. setEnd (-, -); break;
  311. case :
  312. setEnd (-, -); break;
  313. case :
  314. setEnd (-, -); break;
  315. case :
  316. setEnd (-, -); break;
  317. case :
  318. setEnd (-, -); break;
  319. case :
  320. setEnd (-, -); break;
  321. case :
  322. setEnd (-, -); break;
  323. case :
  324. setEnd (-, -); break;
  325. case :
  326. setEnd (-, -); break;
  327. case :
  328. setEnd (-, -); break;
  329. case :
  330. setEnd (-, -); break;
  331. case :
  332. setEnd (-, -); break;
  333. case :
  334. setEnd (-, -); break;
  335. case :
  336. setEnd (-, -); break;
  337. case :
  338. setEnd (-, -); break;
  339. case :
  340. setEnd (-, -); break;
  341. case :
  342. setEnd (-, -); break;
  343. case :
  344. setEnd (-, -); break;
  345. case :
  346. setEnd (-, -); break;
  347. case :
  348. setEnd (-, -); break;
  349. case :
  350. setEnd (-, -); break;
  351. case :
  352. setEnd (-, -); break;
  353. case :
  354. setEnd (-, -); break;
  355. case :
  356. setEnd (-, -); break;
  357. case :
  358. setEnd (-, -); break;
  359. case :
  360. setEnd (-, -); break;
  361. case :
  362. setEnd (-, -); break;
  363. case :
  364. setEnd (-, -); break;
  365. case :
  366. setEnd (-, -); break;
  367. default:
  368. break;
  369. }
  370. }
  371.  
  372. void MainWindow::setNextPos (int index)
  373. {
  374. switch (index) {
  375. case :
  376. setEnd(-, -); break;
  377. case :
  378. setEnd (-, -); break;
  379. case :
  380. setEnd (-, -); break;
  381. case :
  382. setEnd (-, -); break;
  383. case :
  384. setEnd (-, -); break;
  385. case :
  386. setEnd (-, -); break;
  387. case :
  388. setEnd (-, -); break;
  389. case :
  390. setEnd (-, -); break;
  391. case :
  392. setEnd (-, -); break;
  393. case :
  394. setEnd (-, -); break;
  395. case :
  396. setEnd (-, -); break;
  397. case :
  398. setEnd (-, -); break;
  399. case :
  400. setEnd (-, -); break;
  401. case :
  402. setEnd (-, -); break;
  403. case :
  404. setEnd (-, -); break;
  405. case :
  406. setEnd (-, -); break;
  407. case :
  408. setEnd (-, -); break;
  409. case :
  410. setEnd (-, -); break;
  411. case :
  412. setEnd (-, -); break;
  413. case :
  414. setEnd (-, -); break;
  415. case :
  416. setEnd (-, -); break;
  417. case :
  418. setEnd (-, -); break;
  419. case :
  420. setEnd (-, -); break;
  421. case :
  422. setEnd (-, -); break;
  423. case :
  424. setEnd (-, -); break;
  425. case :
  426. setEnd (-, -); break;
  427. case :
  428. setEnd (-, -); break;
  429. case :
  430. setEnd (-, -); break;
  431. case :
  432. setEnd (-, -); break;
  433. case :
  434. setEnd (-, -); break;
  435. case :
  436. setEnd (-, -); break;
  437. default:
  438. break;
  439. }
  440. }
  441.  
  442. void MainWindow::FindPath ()
  443. {
  444. //Demo 在图片上绘线 在原有基础上 (+700, +440);
  445. QVector<QPoint> v;
  446.  
  447. dj->dijkstra (startComboBox->currentIndex ());
  448. //设置下一处的终点
  449. nextPath = dj->get_Path (endComboBox->currentIndex ());
  450.  
  451. //准备绘制
  452. Clear ();
  453. //将路线绘制下来
  454. QGraphicsPathItem *item = new QGraphicsPathItem();
  455.  
  456. QPen pen;
  457. pen.setWidth ();
  458. pen.setColor (Qt::red);
  459. item->setPen (pen);
  460. item->setFlag (QGraphicsItem::ItemIsPanel);
  461.  
  462. // qDebug() << startX << " " << startY << " " << endX << " " << endY;
  463.  
  464. // qDebug() << "Hello World !";
  465.  
  466. //设置起点
  467. // v << QPoint(startX + 700, startY + 440);
  468.  
  469. for (int i = ; i < nextPath.size (); i++) {
  470. qDebug() << nextPath[i] << " , ";
  471. }
  472. scene->addItem (item);
  473.  
  474. QPainterPath pa; //path
  475. // setNextPos (nextPath[1]);
  476. // item->setLine (startX + 700, startY + 440, endX + 700, endY + 440);
  477. pa.moveTo (startX + , startY + );
  478.  
  479. for (int i = ; i < nextPath.size() ; i++) {
  480. setNextPos (nextPath[i]);
  481. pa.lineTo (endX + , endY + );
  482. }
  483. item->setPath (pa);
  484.  
  485. }
  486.  
  487. void MainWindow::Clear ()
  488. {
  489. QList<QGraphicsItem*> listItem = scene->items ();
  490. while (!listItem.empty ())
  491. {
  492. scene->removeItem (listItem.at ());
  493. listItem.removeAt ();
  494. }
  495. QGraphicsPixmapItem *item =
  496. scene->addPixmap (QPixmap("NanTong.jpg"));
  497. // item->setFlag (QGraphicsItem::ItemIsMovable);
  498. item->setPos (-, -);
  499. }
  500.  
  501. void MainWindow::paintEvent (QPaintEvent *)
  502. {
  503.  
  504. }
  1. //Main.cpp
  2. #include "mainwindow.h"
  3. #include "mapwidget.h"
  4. #include <QApplication>
  5. #include <QFont>
  6. #include <QDebug>
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10. QApplication a(argc, argv);
  11. QFont font("ARPL KaitiM GB", );
  12. font.setBold (true);
  13. a.setFont (font);
  14.  
  15. qDebug() << "Run............";
  16. MainWindow w;
  17. w.show ();
  18.  
  19. return a.exec();
  20. }

QT_校园导航(绘制路线已实现)_Updata_详细注释的更多相关文章

  1. QT_校园导航Update

    //MainWidget.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include " ...

  2. QT_地图导航 源码下载

    https://github.com/douzujun/MyMapView 主要算法讲解: 1. 计算最短路径(dijkstra算法) Step1: (1)找到最短路径已经确定的顶点,从它已经确定的顶 ...

  3. 从CUMT校园导航出现的问题看CSS布局设计(一) CSS盒模型

    先说说做的这个校园导航系统值得一提的内容: 1. 二级菜单栏  .iframe内嵌窗口(样式设计.用hover做效果) 2. 高德地图API (自定义底图样式.弹跳点.信息窗体.线路导航) 3. DO ...

  4. QT_地图导航

    //地图显示功能 #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QGraphicsView> #include <QLabel& ...

  5. Android开发技巧——实现底部图标文字的导航栏(已更新)

    本文章的导航栏代码参考了viewpagerindicator的实现.本文叙述的是之前版本的qq或微信中,底部的图标加文字的导航栏的实现. 2014-09-14 13:59:42更新:library的代 ...

  6. Luogu-P1027 Car的旅行路线 已知三点确定矩形 + 最短路

    传送门:https://www.luogu.org/problemnew/show/P1027 题意: 图中有n个城市,每个城市有4个机场在矩形的四个顶点上.一个城市间的机场可以通过高铁通达,不同城市 ...

  7. git修改已提交记录的注释

    已提交暂存区但还未提交远端仓库 命令:git commit --amend -m 已提交远端仓库 命令:git rebase 可以参考:http://www.cnblogs.com/dudu/p/47 ...

  8. Android之View绘制流程开胃菜---setContentView(...)详细分析

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 1 为什么要分析setContentView方法 作为安卓开发者相信大部分都有意或者无意看过如下图示:PhoneWindow,DecorView这些 ...

  9. SVN修改已提交版本的注释

    SVN提交文件后,发现注释写的不完整或不够明确,想再修改注释文字.通过View Project History dialog修改完成后,在提交时遇到如下错误:Repository has not be ...

随机推荐

  1. PHP小记录

    正的framework(大量使用)      thinkphp(部分使用)      cakephpyii(极少使用) [一]函数    1:函数的声明:每个函数的第一行都是函数开头,有声明函数的关键 ...

  2. NodeJS加MongoDB应用入门

    OS:Windows 7 1.下载安装MongoDB:http://www.mongodb.org/downloads 2.下载安装NodeJS:http://nodejs.org/ 3.运行Mong ...

  3. typedef与define基本使用

    参考: typedef用法 http://www.cnblogs.com/ggjucheng/archive/2011/12/27/2303238.html#define用法:http://blog. ...

  4. Forget asp.net membership,ASP.NET Identity Overview

    http://www.asp.net/identity http://www.asp.net/identity/overview/getting-started/introduction-to-asp ...

  5. C++引用之声明方法

    引用就是某一变量的一个别名,对引用的操作就是对目标的操作. 引用的声明方法: 类型标识符 &引用名=目标变量名: 如: int a; int &ra=a; //定义引用ra,他是变量a ...

  6. 标准MD5加密算法

    标准MD5加密算法: public class Md5 { public static String getMd5(String s) { char hexDigits[] = { '0', '1', ...

  7. 17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量

    17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量 下面的章节包含信息关于mysql ...

  8. 如何实现Android重启应用程序代码 ?

    Intent i = getBaseContext().getPackageManager()  .getLaunchIntentForPackage(getBaseContext().getPack ...

  9. King(差分约束)

    http://poj.org/problem?id=1364 题意真心看不大懂啊... 现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}其中ai=a*si,其实这句可以忽略 ...

  10. 《华油能源OA系统数据同步和扩展的设计与实现_张宇峰》阅读笔记

    为什么我会找到这篇论文? 华油能源集团拥有多套信息化软件系统,每个用户需要登录操作多个软件系统,记住多个系统的用户名.密码,需要不停的切换到每个系统,查看是否有需要进行的工作:管理员更是疲于每天对各个 ...