日志的打印完成

控制开始结束的流程完成
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;
QueryModel *query_model;
BusModel *bus_model;
QTimer *tick_timer;
int bus_tick;
@ -28,6 +26,7 @@ public:
virtual ~BusStrategyBase();
/**
*
* @return
@ -47,14 +46,50 @@ public:
virtual bus_query_t *HandleQuery() = 0;
signals:
/**
*
* @param query
*/
void DeleteQuerySignal(bus_query_t *query);
/**
*
* @param string
*/
void PrintStateSignal(QString string);
public slots:
void AppendQuerySlot(int query_type, int node_id) const;
/**
*
*/
void BusBeginSlot();
/**
*
*/
void BusEndSlot();
/**
* tick事件的槽函数
*/
void OneTickSlot(int remaining_time);
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;
QTimer *bus_timer;
explicit BusModel();
~BusModel();
@ -48,7 +46,7 @@ public:
*/
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_TARGET 2 // 目标
#define BUS_STOP 2 // 停止
#define IO_CLOCK 0 // 读取时钟指令
#define IO_READING 1 // 读取请求指令
#define IO_END 2 // 读取结束指令
#define BUS_FCFS 0 // 先来先服务
#define BUS_SSTF 1 // 最短寻找时间优先
#define BUS_SCAN 2 // 顺便服务
#define BUS_RUNNING 0
#define BUS_PAUSING 1
#define BUS_END 2
#endif //AUTO_BUS_GUI_DEFINE_H

View File

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

View File

@ -57,7 +57,7 @@ public:
* @param id
* @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;
query_model = new QueryModel;
bus_model = new BusModel();
tick_timer = new QTimer;
bus_model = new BusModel;
bus_tick = 0;
}
@ -19,7 +18,11 @@ BusStrategyBase::~BusStrategyBase()
delete rails_model;
delete query_model;
delete bus_model;
delete tick_timer;
}
void BusStrategyBase::SetConnection() 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);
}
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;
rail_node_t *node = rails_model->rails;
@ -78,7 +108,7 @@ QString BusStrategyBase::PrintState() const
QString str = QString::asprintf("Time:%d\n", bus_tick);
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 += "STATION:\n";
str = str + "clockwise" + clockwise + "\n";

View File

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

View File

@ -43,6 +43,9 @@ void CentralWidget::SetControlConnection()
// 设置删除请求事件的连接
QObject::connect(controller, &BusStrategyBase::DeleteQuerySignal,
this, &CentralWidget::DeleteQueryItemSlot);
QObject::connect(controller, &BusStrategyBase::PrintStateSignal,
this, &CentralWidget::PrintStateSlot);
}
void CentralWidget::SetWidgetConnection()
@ -119,6 +122,16 @@ void CentralWidget::DeleteQueryItemSlot(bus_query_t *query)
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()
{
int query_type = ui->query_type_combo->currentIndex();

View File

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

View File

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

View File

@ -32,22 +32,22 @@ public:
~MainWindow() override;
signals:
/**
*
*/
void RunBusSignal();
/**
*
*/
void PauseBusSignal();
/**
*
*/
void StopBusSignal();
/**
*
* @param remain_time bus_timer计时器剩余的时间
*/
void BusTickSignal(int remain_time);
public slots:
/**
*
@ -59,21 +59,37 @@ public slots:
*/
void RunBusClicked();
/**
*
*/
void PauseBusClicked();
/**
*
*/
void StopBusClicked();
/**
*
*/
void BeginTickTimerSlot();
/**
*
*/
void EndTickTimerSlot();
/**
* tick的槽函数
*/
void OneTickSlot();
private:
/**
*
*/
const int tick = 1000;
/**
* UI控件
*/
Ui::MainWindow *ui;
/**
*
*/
@ -83,10 +99,15 @@ private:
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 []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;
worker_thread = new QThread;
tick_timer = new QTimer;
bus_timer = new QTimer;
controller = nullptr;
central_widget = new CentralWidget(nullptr);
@ -19,7 +21,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
ui->setupUi(this);
this->setCentralWidget(central_widget);
SetMenuBarConnection();
SetWidgetConnection();
//开始多线程事件循环
worker_thread->start();
@ -33,9 +35,11 @@ MainWindow::~MainWindow()
delete ui;
delete central_widget;
delete worker_thread;
delete tick_timer;
delete bus_timer;
}
void MainWindow::SetMenuBarConnection()
void MainWindow::SetWidgetConnection()
{
// 连接退出按钮
QObject::connect(ui->actionExit, SIGNAL(triggered()),
@ -46,17 +50,36 @@ void MainWindow::SetMenuBarConnection()
// 连接运行公交车按钮
QObject::connect(ui->actionRun_Bus, &QAction::triggered,
this, &MainWindow::RunBusClicked);
// 连接暂停公交车按钮
QObject::connect(ui->actionPause_Bus, &QAction::triggered,
this, &MainWindow::PauseBusClicked);
// 连接停止公交车按钮
QObject::connect(ui->actionStop_Bus, &QAction::triggered,
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()
{
// 开始运行连接
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()
@ -81,9 +104,13 @@ void MainWindow::ReadConfigFileButtonClicked()
}
controller = StrategyFactory::GetStrategy(file_name);
// 开始多线程
BeginThread();
// 设置controller相关连接
SetControlConnection();
central_widget->SetController(controller);
// 重设公交车的状态
controller->bus_model->ResetBus(controller->rails_model->rails);
}
}
@ -92,11 +119,6 @@ void MainWindow::RunBusClicked()
emit RunBusSignal();
}
void MainWindow::PauseBusClicked()
{
emit PauseBusSignal();
}
void MainWindow::StopBusClicked()
{
emit StopBusSignal();
@ -108,4 +130,23 @@ void MainWindow::BeginThread()
{
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)
{
@ -31,7 +31,7 @@ rail_node_t *RailsModel::FindNode(int node_num) const
do
{
if(node->id == node_num)
if(node->id == node_id)
{
result = node;
break;