From b2b043e227be635a9b4cafc847ab2432d10e74c6 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Tue, 28 Jun 2022 09:57:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=AE=BE=E8=AE=A1=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=99=A8=E5=90=8CGUI=E4=B9=8B=E9=97=B4=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=20=E9=87=8D=E5=86=99=E4=BA=86GetBusDirection?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/BusFCFSStrategy.h | 2 +- include/BusSCANStrategy.h | 2 +- include/BusSSTFStrategy.h | 2 +- include/BusStrategyBase.h | 24 +++++++++++++++++++++++- include/busModel.h | 13 +++++-------- src/BusFCFSStrategy.cpp | 4 ++-- src/BusSCANStrategy.cpp | 3 ++- src/BusSSTFStrategy.cpp | 4 +++- src/BusStrategyBase.cpp | 8 ++++++++ src/centralwidget.cpp | 14 +++++++++++++- src/header/centralwidget.h | 28 ++++++++++++++++++---------- src/header/mainwindow.h | 15 +++++++++------ src/mainwindow.cpp | 30 ++++++++++++++++++++++++------ 13 files changed, 110 insertions(+), 39 deletions(-) diff --git a/include/BusFCFSStrategy.h b/include/BusFCFSStrategy.h index 080a284..1e5e657 100644 --- a/include/BusFCFSStrategy.h +++ b/include/BusFCFSStrategy.h @@ -8,7 +8,7 @@ class BusFCFSStrategy : public BusStrategyBase { - int GetBusDirection(bus_query_t *query); + int GetBusDirection(); bus_query_t *GetTargetQuery(); diff --git a/include/BusSCANStrategy.h b/include/BusSCANStrategy.h index 6264724..c5f72d5 100644 --- a/include/BusSCANStrategy.h +++ b/include/BusSCANStrategy.h @@ -9,7 +9,7 @@ class BusSCANStrategy : public BusStrategyBase { - int GetBusDirection(bus_query_t *query); + int GetBusDirection(); bus_query_t *GetTargetQuery(); diff --git a/include/BusSSTFStrategy.h b/include/BusSSTFStrategy.h index ed20658..a5bf298 100644 --- a/include/BusSSTFStrategy.h +++ b/include/BusSSTFStrategy.h @@ -8,7 +8,7 @@ class BusSSTFStrategy : public BusStrategyBase { - int GetBusDirection(bus_query_t *query); + int GetBusDirection(); bus_query_t *GetTargetQuery(); diff --git a/include/BusStrategyBase.h b/include/BusStrategyBase.h index 6c2b628..63dd903 100644 --- a/include/BusStrategyBase.h +++ b/include/BusStrategyBase.h @@ -6,6 +6,7 @@ #define AUTO_BUS_GUI_BUS_CONTROLLER_BASE_H #include "QObject" #include "QString" +#include "QTimer" #include "railsModel.h" #include "queryModel.h" @@ -18,6 +19,8 @@ public: RailsModel *rails_model; QueryModel *query_model; BusModel *bus_model; + QTimer *tick_timer; + int bus_tick; @@ -25,12 +28,31 @@ public: virtual ~BusStrategyBase(); - virtual int GetBusDirection(bus_query_t *query) = 0; + /** + * 获得当前公交车应该前进的方向 + * @return 公交车前进的方向 + */ + virtual int GetBusDirection() = 0; + /** + * 获得公交车在当前指定的策略下应该处理的请求 + * @return 请求指针 + */ virtual bus_query_t *GetTargetQuery() = 0; + /** + * 获取公交车现在可以处理的请求 + * @return 请求指针 + */ virtual bus_query_t *HandleQuery() = 0; + signals: + void DeleteQuerySignal(bus_query_t *query); + +public slots: + void AppendQuerySlot(int query_type, int node_id) const; + + private: QString PrintState() const; diff --git a/include/busModel.h b/include/busModel.h index 5b4da61..68bcd74 100644 --- a/include/busModel.h +++ b/include/busModel.h @@ -9,9 +9,6 @@ #include "queryModel.h" #include "define.h" -#include "cstdio" -#include "string" -#include "sstream" #include "QObject" #include "QDebug" #include "QTimer" @@ -34,6 +31,11 @@ public: */ int direction; + /** + * 当前指定处理的请求 + */ + bus_query_t *target_query; + QTimer *bus_timer; explicit BusModel(); @@ -61,11 +63,6 @@ private: * 轨道的头节点 */ rail_node_t *rail_head; - - /** - * 当前指定处理的请求 - */ - bus_query_t *target_query; }; #endif //AUTO_BUS_GUI_BUS_MODEL_H diff --git a/src/BusFCFSStrategy.cpp b/src/BusFCFSStrategy.cpp index d54d1e4..c81cf90 100644 --- a/src/BusFCFSStrategy.cpp +++ b/src/BusFCFSStrategy.cpp @@ -4,9 +4,9 @@ #include "BusFCFSStrategy.h" -int BusFCFSStrategy::GetBusDirection(bus_query_t *query) +int BusFCFSStrategy::GetBusDirection() { - bus_query_t *p = query; + bus_query_t *p = bus_model->target_query; if(p == NULL) { diff --git a/src/BusSCANStrategy.cpp b/src/BusSCANStrategy.cpp index 37ade41..ba63e2e 100644 --- a/src/BusSCANStrategy.cpp +++ b/src/BusSCANStrategy.cpp @@ -4,9 +4,10 @@ #include "BusSCANStrategy.h" -int BusSCANStrategy::GetBusDirection(bus_query_t *query) +int BusSCANStrategy::GetBusDirection() { int orientation = bus_model->direction; + bus_query_t *query = bus_model->target_query; if(query == NULL) { diff --git a/src/BusSSTFStrategy.cpp b/src/BusSSTFStrategy.cpp index bc12380..3d87644 100644 --- a/src/BusSSTFStrategy.cpp +++ b/src/BusSSTFStrategy.cpp @@ -4,8 +4,10 @@ #include "BusSSTFStrategy.h" -int BusSSTFStrategy::GetBusDirection(bus_query_t *query) +int BusSSTFStrategy::GetBusDirection() { + bus_query_t *query = bus_model->target_query; + if (query == NULL) { return BUS_STOP; diff --git a/src/BusStrategyBase.cpp b/src/BusStrategyBase.cpp index 2779698..20eaa3d 100644 --- a/src/BusStrategyBase.cpp +++ b/src/BusStrategyBase.cpp @@ -9,6 +9,7 @@ BusStrategyBase::BusStrategyBase() rails_model = new RailsModel; query_model = new QueryModel; bus_model = new BusModel(); + tick_timer = new QTimer; bus_tick = 0; } @@ -18,6 +19,13 @@ BusStrategyBase::~BusStrategyBase() delete rails_model; delete query_model; delete bus_model; + delete tick_timer; +} + +void BusStrategyBase::AppendQuerySlot(int query_type, int node_id) const +{ + rail_node_t *node = rails_model->FindNode(node_id); + query_model->CreateQuery(query_type, node); } QString BusStrategyBase::PrintState() const diff --git a/src/centralwidget.cpp b/src/centralwidget.cpp index f4ca00c..5562474 100644 --- a/src/centralwidget.cpp +++ b/src/centralwidget.cpp @@ -15,7 +15,6 @@ CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent), ui(new Ui::Cent ui->main_canva->setScene(scene_manager->scene); - SetControlConnection(); SetWidgetConnection(); SetupQueryList(); } @@ -28,9 +27,22 @@ CentralWidget::~CentralWidget() delete ui; } +void CentralWidget::SetController(BusStrategyBase *c) +{ + controller = c; + SetControlConnection(); + SetRailsScene(controller->rails_model->node_num); +} + void CentralWidget::SetControlConnection() { + // 设置添加请求事件的连接 + QObject::connect(this, &CentralWidget::AppendQuerySignal, + controller, &BusStrategyBase::AppendQuerySlot); + // 设置删除请求事件的连接 + QObject::connect(controller, &BusStrategyBase::DeleteQuerySignal, + this, &CentralWidget::DeleteQueryItemSlot); } void CentralWidget::SetWidgetConnection() diff --git a/src/header/centralwidget.h b/src/header/centralwidget.h index 8414dad..e2ed606 100644 --- a/src/header/centralwidget.h +++ b/src/header/centralwidget.h @@ -13,7 +13,7 @@ #include "mainScene.h" #include "queryListItem.h" -#include "busModel.h" +#include "BusStrategyBase.h" QT_BEGIN_NAMESPACE namespace Ui @@ -31,6 +31,12 @@ public: ~CentralWidget() override; + /** + * 重新设置控制器 + * @param c 控制器指针 + */ + void SetController(BusStrategyBase *c); + signals: /** * 添加一个请求的信号 @@ -47,7 +53,7 @@ public slots: /** * 处理删除一个请求的槽函数 - * @param query 请求的编号 + * @param query 请求指针 */ void DeleteQueryItemSlot(bus_query_t *query); @@ -56,14 +62,6 @@ public slots: */ void AddQueryButtonClicked(); - /** - * 处理轨道重新生成的槽函数 - * 重绘轨道画面 - * 重新设置站点选择下拉栏 - * @param node_num - */ - void SetRailsScene(int node_num); - private: /** * UI控件 @@ -75,6 +73,8 @@ private: */ SceneManager *scene_manager; + BusStrategyBase *controller = nullptr; + /** * 请求列表中的对象 */ @@ -105,6 +105,14 @@ private: * 设置站点选择下拉栏 */ void SetRailsComboBox(int node_num); + + /** + * 处理轨道重新生成的槽函数 + * 重绘轨道画面 + * 重新设置站点选择下拉栏 + * @param node_num + */ + void SetRailsScene(int node_num); }; diff --git a/src/header/mainwindow.h b/src/header/mainwindow.h index d043bdd..e0d4788 100644 --- a/src/header/mainwindow.h +++ b/src/header/mainwindow.h @@ -11,7 +11,8 @@ #include "QMessageBox" #include "centralwidget.h" -#include "busModel.h" +#include "BusStrategyBase.h" +#include "StrategyFactory.h" QT_BEGIN_NAMESPACE @@ -31,11 +32,6 @@ public: ~MainWindow() override; signals: - /** - * 打开配置文件的信号 - * @param file_name 配置文件的文件路径 - */ - void OpenConfigFileSignal(QString file_name); /** * 开始运行公交车的信号 @@ -85,11 +81,18 @@ private: QThread *worker_thread; + BusStrategyBase *controller; + /** * 设置菜单栏的相关连接 */ void SetMenuBarConnection(); + /** + * 设置控制器的相关连接 + */ void SetControlConnection(); + + void BeginThread(); }; #endif //AUTO_BUS_GUI_MAIN_WINDOW_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f926a07..d5ca3d7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -12,20 +12,22 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ui = new Ui::MainWindow; worker_thread = new QThread; - - // 开始多线程 - worker_thread->start(); + controller = nullptr; central_widget = new CentralWidget(nullptr); ui->setupUi(this); this->setCentralWidget(central_widget); + SetMenuBarConnection(); - SetControlConnection(); + + //开始多线程事件循环 + worker_thread->start(); } MainWindow::~MainWindow() { + controller->deleteLater(); worker_thread->quit(); delete ui; @@ -68,12 +70,20 @@ void MainWindow::ReadConfigFileButtonClicked() if(file_name.isEmpty()) { - QMessageBox::warning(this, "警告", "文件名错误"); + QMessageBox::warning(this, "警告", "文件错误"); return; } else { - emit OpenConfigFileSignal(file_name); + if(controller != nullptr) + { + controller->deleteLater(); + } + + controller = StrategyFactory::GetStrategy(file_name); + BeginThread(); + SetControlConnection(); + central_widget->SetController(controller); } } @@ -90,4 +100,12 @@ void MainWindow::PauseBusClicked() void MainWindow::StopBusClicked() { emit StopBusSignal(); +} + +void MainWindow::BeginThread() +{ + if(controller != nullptr) + { + controller->moveToThread(worker_thread); + } } \ No newline at end of file