重新设计控制器同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 class BusFCFSStrategy : public BusStrategyBase
{ {
int GetBusDirection(bus_query_t *query); int GetBusDirection();
bus_query_t *GetTargetQuery(); bus_query_t *GetTargetQuery();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
} }
} }
@ -90,4 +100,12 @@ void MainWindow::PauseBusClicked()
void MainWindow::StopBusClicked() void MainWindow::StopBusClicked()
{ {
emit StopBusSignal(); emit StopBusSignal();
}
void MainWindow::BeginThread()
{
if(controller != nullptr)
{
controller->moveToThread(worker_thread);
}
} }