日志的打印完成

控制开始结束的流程完成
This commit is contained in:
jackfiled 2022-06-28 18:44:55 +08:00
parent 112299b02f
commit ab830fcd9e
14 changed files with 203 additions and 45 deletions

View File

@ -19,8 +19,6 @@ 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;
@ -28,6 +26,7 @@ public:
virtual ~BusStrategyBase(); virtual ~BusStrategyBase();
/** /**
* *
* @return * @return
@ -47,14 +46,50 @@ public:
virtual bus_query_t *HandleQuery() = 0; virtual bus_query_t *HandleQuery() = 0;
signals: signals:
/**
*
* @param query
*/
void DeleteQuerySignal(bus_query_t *query); void DeleteQuerySignal(bus_query_t *query);
/**
*
* @param string
*/
void PrintStateSignal(QString string);
public slots: public slots:
void AppendQuerySlot(int query_type, int node_id) const; void AppendQuerySlot(int query_type, int node_id) const;
/**
*
*/
void BusBeginSlot();
/**
*
*/
void BusEndSlot();
/**
* tick事件的槽函数
*/
void OneTickSlot(int remaining_time);
private: private:
QString PrintState() const; /**
*
*/
int status = BUS_END;
/**
*
* @return
*/
QString PrintState(int remaining_time) const;
void SetConnection() const;
}; };

View File

@ -36,8 +36,6 @@ public:
*/ */
bus_query_t *target_query; bus_query_t *target_query;
QTimer *bus_timer;
explicit BusModel(); explicit BusModel();
~BusModel(); ~BusModel();
@ -48,7 +46,7 @@ public:
*/ */
void ResetBus(rail_node_t *head); void ResetBus(rail_node_t *head);
double GetBusPosition(); double GetBusPosition(int remaining_time);
/** /**
* *

View File

@ -9,11 +9,11 @@
#define BUS_COUNTER_CLOCK_WISE 1 // 逆时针 #define BUS_COUNTER_CLOCK_WISE 1 // 逆时针
#define BUS_TARGET 2 // 目标 #define BUS_TARGET 2 // 目标
#define BUS_STOP 2 // 停止 #define BUS_STOP 2 // 停止
#define IO_CLOCK 0 // 读取时钟指令
#define IO_READING 1 // 读取请求指令
#define IO_END 2 // 读取结束指令
#define BUS_FCFS 0 // 先来先服务 #define BUS_FCFS 0 // 先来先服务
#define BUS_SSTF 1 // 最短寻找时间优先 #define BUS_SSTF 1 // 最短寻找时间优先
#define BUS_SCAN 2 // 顺便服务 #define BUS_SCAN 2 // 顺便服务
#define BUS_RUNNING 0
#define BUS_PAUSING 1
#define BUS_END 2
#endif //AUTO_BUS_GUI_DEFINE_H #endif //AUTO_BUS_GUI_DEFINE_H

View File

@ -29,6 +29,13 @@ public:
*/ */
void SetStopScene(int node_number); void SetStopScene(int node_number);
/**
*
* @param direction
* @param duration
*/
void BeginBusAnimation(int direction, int duration);
private: private:
/** /**
* *

View File

@ -57,7 +57,7 @@ public:
* @param id * @param id
* @return * @return
*/ */
rail_node_t *FindNode(int node_num) const; rail_node_t *FindNode(int node_id) const;
/** /**
* *

View File

@ -8,8 +8,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;
} }
@ -19,7 +18,11 @@ 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::SetConnection() const
{
} }
void BusStrategyBase::AppendQuerySlot(int query_type, int node_id) const void BusStrategyBase::AppendQuerySlot(int query_type, int node_id) const
@ -28,7 +31,34 @@ void BusStrategyBase::AppendQuerySlot(int query_type, int node_id) const
query_model->CreateQuery(query_type, node); query_model->CreateQuery(query_type, node);
} }
QString BusStrategyBase::PrintState() const void BusStrategyBase::OneTickSlot(int remaining_time)
{
// 时间流动
bus_tick++;
// 打印状态
QString str = PrintState(remaining_time);
emit PrintStateSignal(str);
}
void BusStrategyBase::BusBeginSlot()
{
status = BUS_RUNNING;
// 在一开始先打印一下状态
QString str = PrintState(0);
emit PrintStateSignal(str);
}
void BusStrategyBase::BusEndSlot()
{
status = BUS_END;
bus_tick = 0;
bus_model->ResetBus(rails_model->rails);
}
QString BusStrategyBase::PrintState(int remaining_time) const
{ {
int count = 0; int count = 0;
rail_node_t *node = rails_model->rails; rail_node_t *node = rails_model->rails;
@ -78,7 +108,7 @@ QString BusStrategyBase::PrintState() const
QString str = QString::asprintf("Time:%d\n", bus_tick); QString str = QString::asprintf("Time:%d\n", bus_tick);
str += "BUS:\n"; str += "BUS:\n";
str += QString::asprintf("position:%lf\n", bus_model->GetBusPosition()); str += QString::asprintf("position:%lf\n", bus_model->GetBusPosition(remaining_time));
str = str + "target:" + target + "\n"; str = str + "target:" + target + "\n";
str += "STATION:\n"; str += "STATION:\n";
str = str + "clockwise" + clockwise + "\n"; str = str + "clockwise" + clockwise + "\n";

View File

@ -10,13 +10,11 @@ BusModel::BusModel()
direction = BUS_STOP; direction = BUS_STOP;
target_query = nullptr; target_query = nullptr;
rail_head = nullptr; rail_head = nullptr;
bus_timer = new QTimer;
} }
BusModel::~BusModel() BusModel::~BusModel()
{ {
delete bus_timer;
} }
void BusModel::ResetBus(rail_node_t *head) void BusModel::ResetBus(rail_node_t *head)
@ -28,7 +26,7 @@ void BusModel::ResetBus(rail_node_t *head)
rail_pos = rail_head; rail_pos = rail_head;
} }
double BusModel::GetBusPosition() double BusModel::GetBusPosition(int remaining_time)
{ {
double result = 0; double result = 0;
rail_node_t *now_pos = rail_pos; rail_node_t *now_pos = rail_pos;
@ -41,7 +39,11 @@ double BusModel::GetBusPosition()
node = node->next_node; node = node->next_node;
} while (node != now_pos); } while (node != now_pos);
int remaining_time = bus_timer->remainingTime(); // 如果就在起始点距离为0
if(now_pos == rail_head)
{
result = 0;
}
if(remaining_time > 0) if(remaining_time > 0)
{ {

View File

@ -43,6 +43,9 @@ void CentralWidget::SetControlConnection()
// 设置删除请求事件的连接 // 设置删除请求事件的连接
QObject::connect(controller, &BusStrategyBase::DeleteQuerySignal, QObject::connect(controller, &BusStrategyBase::DeleteQuerySignal,
this, &CentralWidget::DeleteQueryItemSlot); this, &CentralWidget::DeleteQueryItemSlot);
QObject::connect(controller, &BusStrategyBase::PrintStateSignal,
this, &CentralWidget::PrintStateSlot);
} }
void CentralWidget::SetWidgetConnection() void CentralWidget::SetWidgetConnection()
@ -119,6 +122,16 @@ void CentralWidget::DeleteQueryItemSlot(bus_query_t *query)
delete *pos; delete *pos;
} }
void CentralWidget::PrintStateSlot(const QString& string)
{
ui->text_output->insertPlainText(string);
// 设置光标在最后一行
QTextCursor cursor = ui->text_output->textCursor();
cursor.movePosition(QTextCursor::End);
ui->text_output->setTextCursor(cursor);
}
void CentralWidget::AddQueryButtonClicked() void CentralWidget::AddQueryButtonClicked()
{ {
int query_type = ui->query_type_combo->currentIndex(); int query_type = ui->query_type_combo->currentIndex();

View File

@ -46,7 +46,6 @@
<string>Run</string> <string>Run</string>
</property> </property>
<addaction name="actionRun_Bus"/> <addaction name="actionRun_Bus"/>
<addaction name="actionPause_Bus"/>
<addaction name="actionStop_Bus"/> <addaction name="actionStop_Bus"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>

View File

@ -10,6 +10,7 @@
#include "string" #include "string"
#include "list" #include "list"
#include "QMessageBox" #include "QMessageBox"
#include "QTextCursor"
#include "mainScene.h" #include "mainScene.h"
#include "queryListItem.h" #include "queryListItem.h"
@ -62,6 +63,12 @@ public slots:
*/ */
void AddQueryButtonClicked(); void AddQueryButtonClicked();
/**
*
* @param string
*/
void PrintStateSlot(const QString& string);
private: private:
/** /**
* UI控件 * UI控件

View File

@ -32,22 +32,22 @@ public:
~MainWindow() override; ~MainWindow() override;
signals: signals:
/** /**
* *
*/ */
void RunBusSignal(); void RunBusSignal();
/**
*
*/
void PauseBusSignal();
/** /**
* *
*/ */
void StopBusSignal(); void StopBusSignal();
/**
*
* @param remain_time bus_timer计时器剩余的时间
*/
void BusTickSignal(int remain_time);
public slots: public slots:
/** /**
* *
@ -59,21 +59,37 @@ public slots:
*/ */
void RunBusClicked(); void RunBusClicked();
/**
*
*/
void PauseBusClicked();
/** /**
* *
*/ */
void StopBusClicked(); void StopBusClicked();
/**
*
*/
void BeginTickTimerSlot();
/**
*
*/
void EndTickTimerSlot();
/**
* tick的槽函数
*/
void OneTickSlot();
private: private:
/**
*
*/
const int tick = 1000;
/** /**
* UI控件 * UI控件
*/ */
Ui::MainWindow *ui; Ui::MainWindow *ui;
/** /**
* *
*/ */
@ -83,10 +99,15 @@ private:
BusStrategyBase *controller; BusStrategyBase *controller;
QTimer *tick_timer;
QTimer *bus_timer;
/** /**
* *
*/ */
void SetMenuBarConnection(); void SetWidgetConnection();
/** /**
* *

View File

@ -81,3 +81,8 @@ void SceneManager::ClearStopScene()
delete []pixmap_items; delete []pixmap_items;
delete []stop_pos_pairs; delete []stop_pos_pairs;
} }
void SceneManager::BeginBusAnimation(int direction, int duration)
{
bus->StartAnimation(direction, duration);
}

View File

@ -12,6 +12,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{ {
ui = new Ui::MainWindow; ui = new Ui::MainWindow;
worker_thread = new QThread; worker_thread = new QThread;
tick_timer = new QTimer;
bus_timer = new QTimer;
controller = nullptr; controller = nullptr;
central_widget = new CentralWidget(nullptr); central_widget = new CentralWidget(nullptr);
@ -19,7 +21,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
ui->setupUi(this); ui->setupUi(this);
this->setCentralWidget(central_widget); this->setCentralWidget(central_widget);
SetMenuBarConnection(); SetWidgetConnection();
//开始多线程事件循环 //开始多线程事件循环
worker_thread->start(); worker_thread->start();
@ -33,9 +35,11 @@ MainWindow::~MainWindow()
delete ui; delete ui;
delete central_widget; delete central_widget;
delete worker_thread; delete worker_thread;
delete tick_timer;
delete bus_timer;
} }
void MainWindow::SetMenuBarConnection() void MainWindow::SetWidgetConnection()
{ {
// 连接退出按钮 // 连接退出按钮
QObject::connect(ui->actionExit, SIGNAL(triggered()), QObject::connect(ui->actionExit, SIGNAL(triggered()),
@ -46,17 +50,36 @@ void MainWindow::SetMenuBarConnection()
// 连接运行公交车按钮 // 连接运行公交车按钮
QObject::connect(ui->actionRun_Bus, &QAction::triggered, QObject::connect(ui->actionRun_Bus, &QAction::triggered,
this, &MainWindow::RunBusClicked); this, &MainWindow::RunBusClicked);
// 连接暂停公交车按钮
QObject::connect(ui->actionPause_Bus, &QAction::triggered,
this, &MainWindow::PauseBusClicked);
// 连接停止公交车按钮 // 连接停止公交车按钮
QObject::connect(ui->actionStop_Bus, &QAction::triggered, QObject::connect(ui->actionStop_Bus, &QAction::triggered,
this, &MainWindow::StopBusClicked); this, &MainWindow::StopBusClicked);
// 开始全局计时器连接
QObject::connect(this, &MainWindow::RunBusSignal,
this, &MainWindow::BeginTickTimerSlot);
// 结束全局计时器连接
QObject::connect(this, &MainWindow::StopBusSignal,
this, &MainWindow::EndTickTimerSlot);
// 处理计时器tick连接
QObject::connect(tick_timer, &QTimer::timeout,
this, &MainWindow::OneTickSlot);
} }
void MainWindow::SetControlConnection() void MainWindow::SetControlConnection()
{ {
// 开始运行连接
QObject::connect(this, &MainWindow::RunBusSignal,
controller, &BusStrategyBase::BusBeginSlot);
QObject::connect(this, &MainWindow::StopBusSignal,
controller, &BusStrategyBase::BusEndSlot);
// 每一tick连接
QObject::connect(this, &MainWindow::BusTickSignal,
controller, &BusStrategyBase::OneTickSlot);
} }
void MainWindow::ReadConfigFileButtonClicked() void MainWindow::ReadConfigFileButtonClicked()
@ -81,9 +104,13 @@ void MainWindow::ReadConfigFileButtonClicked()
} }
controller = StrategyFactory::GetStrategy(file_name); controller = StrategyFactory::GetStrategy(file_name);
// 开始多线程
BeginThread(); BeginThread();
// 设置controller相关连接
SetControlConnection(); SetControlConnection();
central_widget->SetController(controller); central_widget->SetController(controller);
// 重设公交车的状态
controller->bus_model->ResetBus(controller->rails_model->rails);
} }
} }
@ -92,11 +119,6 @@ void MainWindow::RunBusClicked()
emit RunBusSignal(); emit RunBusSignal();
} }
void MainWindow::PauseBusClicked()
{
emit PauseBusSignal();
}
void MainWindow::StopBusClicked() void MainWindow::StopBusClicked()
{ {
emit StopBusSignal(); emit StopBusSignal();
@ -109,3 +131,22 @@ void MainWindow::BeginThread()
controller->moveToThread(worker_thread); controller->moveToThread(worker_thread);
} }
} }
void MainWindow::BeginTickTimerSlot()
{
tick_timer->setInterval(tick);
tick_timer->start();
}
void MainWindow::OneTickSlot()
{
int time = bus_timer->remainingTime();
emit BusTickSignal(time);
}
void MainWindow::EndTickTimerSlot()
{
tick_timer->stop();
}

View File

@ -19,7 +19,7 @@ RailsModel::~RailsModel()
} }
} }
rail_node_t *RailsModel::FindNode(int node_num) const rail_node_t *RailsModel::FindNode(int node_id) const
{ {
if (rails == nullptr) if (rails == nullptr)
{ {
@ -31,7 +31,7 @@ rail_node_t *RailsModel::FindNode(int node_num) const
do do
{ {
if(node->id == node_num) if(node->id == node_id)
{ {
result = node; result = node;
break; break;