重新设计控制器同GUI之间的关系

重写了GetBusDirection函数
This commit is contained in:
2022-06-28 09:57:43 +08:00
parent e5d7f0b238
commit b2b043e227
13 changed files with 110 additions and 39 deletions

View File

@@ -8,7 +8,7 @@
class BusFCFSStrategy : public BusStrategyBase
{
int GetBusDirection(bus_query_t *query);
int GetBusDirection();
bus_query_t *GetTargetQuery();

View File

@@ -9,7 +9,7 @@
class BusSCANStrategy : public BusStrategyBase
{
int GetBusDirection(bus_query_t *query);
int GetBusDirection();
bus_query_t *GetTargetQuery();

View File

@@ -8,7 +8,7 @@
class BusSSTFStrategy : public BusStrategyBase
{
int GetBusDirection(bus_query_t *query);
int GetBusDirection();
bus_query_t *GetTargetQuery();

View File

@@ -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;

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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

View File

@@ -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()

View File

@@ -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);
};

View File

@@ -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

View File

@@ -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);
}
}