重新设计控制器同GUI之间的关系
重写了GetBusDirection函数
This commit is contained in:
parent
e5d7f0b238
commit
b2b043e227
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
class BusFCFSStrategy : public BusStrategyBase
|
class BusFCFSStrategy : public BusStrategyBase
|
||||||
{
|
{
|
||||||
int GetBusDirection(bus_query_t *query);
|
int GetBusDirection();
|
||||||
|
|
||||||
bus_query_t *GetTargetQuery();
|
bus_query_t *GetTargetQuery();
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
class BusSCANStrategy : public BusStrategyBase
|
class BusSCANStrategy : public BusStrategyBase
|
||||||
{
|
{
|
||||||
int GetBusDirection(bus_query_t *query);
|
int GetBusDirection();
|
||||||
|
|
||||||
bus_query_t *GetTargetQuery();
|
bus_query_t *GetTargetQuery();
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
class BusSSTFStrategy : public BusStrategyBase
|
class BusSSTFStrategy : public BusStrategyBase
|
||||||
{
|
{
|
||||||
int GetBusDirection(bus_query_t *query);
|
int GetBusDirection();
|
||||||
|
|
||||||
bus_query_t *GetTargetQuery();
|
bus_query_t *GetTargetQuery();
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#define AUTO_BUS_GUI_BUS_CONTROLLER_BASE_H
|
#define AUTO_BUS_GUI_BUS_CONTROLLER_BASE_H
|
||||||
#include "QObject"
|
#include "QObject"
|
||||||
#include "QString"
|
#include "QString"
|
||||||
|
#include "QTimer"
|
||||||
|
|
||||||
#include "railsModel.h"
|
#include "railsModel.h"
|
||||||
#include "queryModel.h"
|
#include "queryModel.h"
|
||||||
|
@ -18,6 +19,8 @@ public:
|
||||||
RailsModel *rails_model;
|
RailsModel *rails_model;
|
||||||
QueryModel *query_model;
|
QueryModel *query_model;
|
||||||
BusModel *bus_model;
|
BusModel *bus_model;
|
||||||
|
QTimer *tick_timer;
|
||||||
|
|
||||||
|
|
||||||
int bus_tick;
|
int bus_tick;
|
||||||
|
|
||||||
|
@ -25,12 +28,31 @@ public:
|
||||||
|
|
||||||
virtual ~BusStrategyBase();
|
virtual ~BusStrategyBase();
|
||||||
|
|
||||||
virtual int GetBusDirection(bus_query_t *query) = 0;
|
/**
|
||||||
|
* 获得当前公交车应该前进的方向
|
||||||
|
* @return 公交车前进的方向
|
||||||
|
*/
|
||||||
|
virtual int GetBusDirection() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得公交车在当前指定的策略下应该处理的请求
|
||||||
|
* @return 请求指针
|
||||||
|
*/
|
||||||
virtual bus_query_t *GetTargetQuery() = 0;
|
virtual bus_query_t *GetTargetQuery() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取公交车现在可以处理的请求
|
||||||
|
* @return 请求指针
|
||||||
|
*/
|
||||||
virtual bus_query_t *HandleQuery() = 0;
|
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:
|
private:
|
||||||
QString PrintState() const;
|
QString PrintState() const;
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,6 @@
|
||||||
#include "queryModel.h"
|
#include "queryModel.h"
|
||||||
#include "define.h"
|
#include "define.h"
|
||||||
|
|
||||||
#include "cstdio"
|
|
||||||
#include "string"
|
|
||||||
#include "sstream"
|
|
||||||
#include "QObject"
|
#include "QObject"
|
||||||
#include "QDebug"
|
#include "QDebug"
|
||||||
#include "QTimer"
|
#include "QTimer"
|
||||||
|
@ -34,6 +31,11 @@ public:
|
||||||
*/
|
*/
|
||||||
int direction;
|
int direction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前指定处理的请求
|
||||||
|
*/
|
||||||
|
bus_query_t *target_query;
|
||||||
|
|
||||||
QTimer *bus_timer;
|
QTimer *bus_timer;
|
||||||
|
|
||||||
explicit BusModel();
|
explicit BusModel();
|
||||||
|
@ -61,11 +63,6 @@ private:
|
||||||
* 轨道的头节点
|
* 轨道的头节点
|
||||||
*/
|
*/
|
||||||
rail_node_t *rail_head;
|
rail_node_t *rail_head;
|
||||||
|
|
||||||
/**
|
|
||||||
* 当前指定处理的请求
|
|
||||||
*/
|
|
||||||
bus_query_t *target_query;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //AUTO_BUS_GUI_BUS_MODEL_H
|
#endif //AUTO_BUS_GUI_BUS_MODEL_H
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
#include "BusFCFSStrategy.h"
|
#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)
|
if(p == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
#include "BusSCANStrategy.h"
|
#include "BusSCANStrategy.h"
|
||||||
|
|
||||||
int BusSCANStrategy::GetBusDirection(bus_query_t *query)
|
int BusSCANStrategy::GetBusDirection()
|
||||||
{
|
{
|
||||||
int orientation = bus_model->direction;
|
int orientation = bus_model->direction;
|
||||||
|
bus_query_t *query = bus_model->target_query;
|
||||||
|
|
||||||
if(query == NULL)
|
if(query == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,8 +4,10 @@
|
||||||
|
|
||||||
#include "BusSSTFStrategy.h"
|
#include "BusSSTFStrategy.h"
|
||||||
|
|
||||||
int BusSSTFStrategy::GetBusDirection(bus_query_t *query)
|
int BusSSTFStrategy::GetBusDirection()
|
||||||
{
|
{
|
||||||
|
bus_query_t *query = bus_model->target_query;
|
||||||
|
|
||||||
if (query == NULL)
|
if (query == NULL)
|
||||||
{
|
{
|
||||||
return BUS_STOP;
|
return BUS_STOP;
|
||||||
|
|
|
@ -9,6 +9,7 @@ BusStrategyBase::BusStrategyBase()
|
||||||
rails_model = new RailsModel;
|
rails_model = new RailsModel;
|
||||||
query_model = new QueryModel;
|
query_model = new QueryModel;
|
||||||
bus_model = new BusModel();
|
bus_model = new BusModel();
|
||||||
|
tick_timer = new QTimer;
|
||||||
|
|
||||||
bus_tick = 0;
|
bus_tick = 0;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +19,13 @@ BusStrategyBase::~BusStrategyBase()
|
||||||
delete rails_model;
|
delete rails_model;
|
||||||
delete query_model;
|
delete query_model;
|
||||||
delete bus_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
|
QString BusStrategyBase::PrintState() const
|
||||||
|
|
|
@ -15,7 +15,6 @@ CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent), ui(new Ui::Cent
|
||||||
|
|
||||||
ui->main_canva->setScene(scene_manager->scene);
|
ui->main_canva->setScene(scene_manager->scene);
|
||||||
|
|
||||||
SetControlConnection();
|
|
||||||
SetWidgetConnection();
|
SetWidgetConnection();
|
||||||
SetupQueryList();
|
SetupQueryList();
|
||||||
}
|
}
|
||||||
|
@ -28,9 +27,22 @@ CentralWidget::~CentralWidget()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CentralWidget::SetController(BusStrategyBase *c)
|
||||||
|
{
|
||||||
|
controller = c;
|
||||||
|
SetControlConnection();
|
||||||
|
SetRailsScene(controller->rails_model->node_num);
|
||||||
|
}
|
||||||
|
|
||||||
void CentralWidget::SetControlConnection()
|
void CentralWidget::SetControlConnection()
|
||||||
{
|
{
|
||||||
|
// 设置添加请求事件的连接
|
||||||
|
QObject::connect(this, &CentralWidget::AppendQuerySignal,
|
||||||
|
controller, &BusStrategyBase::AppendQuerySlot);
|
||||||
|
|
||||||
|
// 设置删除请求事件的连接
|
||||||
|
QObject::connect(controller, &BusStrategyBase::DeleteQuerySignal,
|
||||||
|
this, &CentralWidget::DeleteQueryItemSlot);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CentralWidget::SetWidgetConnection()
|
void CentralWidget::SetWidgetConnection()
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include "mainScene.h"
|
#include "mainScene.h"
|
||||||
#include "queryListItem.h"
|
#include "queryListItem.h"
|
||||||
#include "busModel.h"
|
#include "BusStrategyBase.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui
|
namespace Ui
|
||||||
|
@ -31,6 +31,12 @@ public:
|
||||||
|
|
||||||
~CentralWidget() override;
|
~CentralWidget() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重新设置控制器
|
||||||
|
* @param c 控制器指针
|
||||||
|
*/
|
||||||
|
void SetController(BusStrategyBase *c);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
/**
|
||||||
* 添加一个请求的信号
|
* 添加一个请求的信号
|
||||||
|
@ -47,7 +53,7 @@ public slots:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理删除一个请求的槽函数
|
* 处理删除一个请求的槽函数
|
||||||
* @param query 请求的编号
|
* @param query 请求指针
|
||||||
*/
|
*/
|
||||||
void DeleteQueryItemSlot(bus_query_t *query);
|
void DeleteQueryItemSlot(bus_query_t *query);
|
||||||
|
|
||||||
|
@ -56,14 +62,6 @@ public slots:
|
||||||
*/
|
*/
|
||||||
void AddQueryButtonClicked();
|
void AddQueryButtonClicked();
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理轨道重新生成的槽函数
|
|
||||||
* 重绘轨道画面
|
|
||||||
* 重新设置站点选择下拉栏
|
|
||||||
* @param node_num
|
|
||||||
*/
|
|
||||||
void SetRailsScene(int node_num);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* UI控件
|
* UI控件
|
||||||
|
@ -75,6 +73,8 @@ private:
|
||||||
*/
|
*/
|
||||||
SceneManager *scene_manager;
|
SceneManager *scene_manager;
|
||||||
|
|
||||||
|
BusStrategyBase *controller = nullptr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求列表中的对象
|
* 请求列表中的对象
|
||||||
*/
|
*/
|
||||||
|
@ -105,6 +105,14 @@ private:
|
||||||
* 设置站点选择下拉栏
|
* 设置站点选择下拉栏
|
||||||
*/
|
*/
|
||||||
void SetRailsComboBox(int node_num);
|
void SetRailsComboBox(int node_num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理轨道重新生成的槽函数
|
||||||
|
* 重绘轨道画面
|
||||||
|
* 重新设置站点选择下拉栏
|
||||||
|
* @param node_num
|
||||||
|
*/
|
||||||
|
void SetRailsScene(int node_num);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
#include "QMessageBox"
|
#include "QMessageBox"
|
||||||
|
|
||||||
#include "centralwidget.h"
|
#include "centralwidget.h"
|
||||||
#include "busModel.h"
|
#include "BusStrategyBase.h"
|
||||||
|
#include "StrategyFactory.h"
|
||||||
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
@ -31,11 +32,6 @@ public:
|
||||||
~MainWindow() override;
|
~MainWindow() override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
|
||||||
* 打开配置文件的信号
|
|
||||||
* @param file_name 配置文件的文件路径
|
|
||||||
*/
|
|
||||||
void OpenConfigFileSignal(QString file_name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开始运行公交车的信号
|
* 开始运行公交车的信号
|
||||||
|
@ -85,11 +81,18 @@ private:
|
||||||
|
|
||||||
QThread *worker_thread;
|
QThread *worker_thread;
|
||||||
|
|
||||||
|
BusStrategyBase *controller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置菜单栏的相关连接
|
* 设置菜单栏的相关连接
|
||||||
*/
|
*/
|
||||||
void SetMenuBarConnection();
|
void SetMenuBarConnection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置控制器的相关连接
|
||||||
|
*/
|
||||||
void SetControlConnection();
|
void SetControlConnection();
|
||||||
|
|
||||||
|
void BeginThread();
|
||||||
};
|
};
|
||||||
#endif //AUTO_BUS_GUI_MAIN_WINDOW_H
|
#endif //AUTO_BUS_GUI_MAIN_WINDOW_H
|
||||||
|
|
|
@ -12,20 +12,22 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
{
|
{
|
||||||
ui = new Ui::MainWindow;
|
ui = new Ui::MainWindow;
|
||||||
worker_thread = new QThread;
|
worker_thread = new QThread;
|
||||||
|
controller = nullptr;
|
||||||
// 开始多线程
|
|
||||||
worker_thread->start();
|
|
||||||
|
|
||||||
central_widget = new CentralWidget(nullptr);
|
central_widget = new CentralWidget(nullptr);
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setCentralWidget(central_widget);
|
this->setCentralWidget(central_widget);
|
||||||
|
|
||||||
SetMenuBarConnection();
|
SetMenuBarConnection();
|
||||||
SetControlConnection();
|
|
||||||
|
//开始多线程事件循环
|
||||||
|
worker_thread->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
|
controller->deleteLater();
|
||||||
worker_thread->quit();
|
worker_thread->quit();
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
|
@ -68,12 +70,20 @@ void MainWindow::ReadConfigFileButtonClicked()
|
||||||
|
|
||||||
if(file_name.isEmpty())
|
if(file_name.isEmpty())
|
||||||
{
|
{
|
||||||
QMessageBox::warning(this, "警告", "文件名错误");
|
QMessageBox::warning(this, "警告", "文件错误");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
emit OpenConfigFileSignal(file_name);
|
if(controller != nullptr)
|
||||||
|
{
|
||||||
|
controller->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
controller = StrategyFactory::GetStrategy(file_name);
|
||||||
|
BeginThread();
|
||||||
|
SetControlConnection();
|
||||||
|
central_widget->SetController(controller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,3 +101,11 @@ void MainWindow::StopBusClicked()
|
||||||
{
|
{
|
||||||
emit StopBusSignal();
|
emit StopBusSignal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::BeginThread()
|
||||||
|
{
|
||||||
|
if(controller != nullptr)
|
||||||
|
{
|
||||||
|
controller->moveToThread(worker_thread);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user