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

重写了GetBusDirection函数
This commit is contained in:
jackfiled 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);
}
}