From a044ff104489d70dedf0a0a0e9102ba4b5a6e9f0 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Sun, 26 Jun 2022 12:09:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=9A=84=E7=9B=B8=E5=85=B3=E6=A7=BD=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/centralwidget.cpp | 56 +++++++++++++++++ src/form/centralwidget.ui | 125 +++++++++++++++++++++++++++++-------- src/form/mainwindow.ui | 24 +++++++ src/header/centralwidget.h | 34 ++++++++++ 4 files changed, 213 insertions(+), 26 deletions(-) diff --git a/src/centralwidget.cpp b/src/centralwidget.cpp index a824f74..7f30ff2 100644 --- a/src/centralwidget.cpp +++ b/src/centralwidget.cpp @@ -15,10 +15,66 @@ CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent), ui(new Ui::Cent scene_manager = new SceneManager(20); ui->main_canva->setScene(scene_manager->scene); + + SetupQueryList(); } CentralWidget::~CentralWidget() { + DeleteQueryList(); + delete scene_manager; delete ui; } + +void CentralWidget::SetupQueryList() +{ + // 设置请求列表的表头 + QueryListItem *column_name = new QueryListItem(1,1); + column_name->SetColumnName(); + + query_items.push_back(column_name); + + // 在列表中显示 + QListWidgetItem *widget_item = new QListWidgetItem; + ui->query_list->addItem(widget_item); + ui->query_list->setItemWidget(widget_item, column_name); +} + +void CentralWidget::DeleteQueryList() +{ + for(auto itor = query_items.begin(); itor != query_items.end(); ++itor) + { + delete *itor; + } + query_items.clear(); +} + +void CentralWidget::AppendQueryItem(int query_type, int node_id) +{ + QueryListItem *item = new QueryListItem(query_type, node_id); + + query_items.push_back(item); + + // 在列表中显示 + QListWidgetItem *widget_item = new QListWidgetItem; + ui->query_list->addItem(widget_item); + ui->query_list->setItemWidget(widget_item, item); +} + +void CentralWidget::DeleteQueryItem(int query_id) +{ + // 由于表头的存在,且请求的编号从1开始,请求的编号恰好就是请求在列表中的位置 + QListWidgetItem *deleted_widget = ui->query_list->takeItem(query_id); + + auto itor = query_items.begin(); + + for(int i = 0; i < query_id; i++) + { + ++itor; + } + + delete deleted_widget; + delete *itor; + query_items.erase(itor); +} \ No newline at end of file diff --git a/src/form/centralwidget.ui b/src/form/centralwidget.ui index 5084fb9..d6ae526 100644 --- a/src/form/centralwidget.ui +++ b/src/form/centralwidget.ui @@ -29,32 +29,6 @@ - - - - 659 - -1 - 201 - 411 - - - - - - - 测试输出 - - - - - - - 控制面板 - - - - - @@ -78,6 +52,105 @@ Qt::Horizontal + + + + 770 + 160 + 121 + 231 + + + + + + + + 12 + + + + 添加请求 + + + + + + + + 10 + + + + 请求类型 + + + + + + + + 顺时针上车 + + + + + 逆时针上车 + + + + + 下车 + + + + + + + + 目标站点 + + + + + + + + + + 创建请求 + + + + + + + + + 600 + 170 + 161 + 221 + + + + + + + + 12 + + + + 请求列表 + + + + + + + + diff --git a/src/form/mainwindow.ui b/src/form/mainwindow.ui index 3e16570..27bd9a3 100644 --- a/src/form/mainwindow.ui +++ b/src/form/mainwindow.ui @@ -41,7 +41,16 @@ + + + Run + + + + + + @@ -53,6 +62,21 @@ Exit + + + Run Bus + + + + + Pause Bus + + + + + Stop Bus + + diff --git a/src/header/centralwidget.h b/src/header/centralwidget.h index c02d4a3..ee6a496 100644 --- a/src/header/centralwidget.h +++ b/src/header/centralwidget.h @@ -6,8 +6,12 @@ #define AUTO_BUS_GUI_CENTRAL_WIDGET_H #include +#include "QListWidgetItem" #include "string" +#include "list" + #include "mainScene.h" +#include "queryListItem.h" QT_BEGIN_NAMESPACE namespace Ui @@ -26,11 +30,41 @@ public: ~CentralWidget() override; public slots: + /** + * 处理添加一个请求的槽函数 + * @param query_type 请求的类型 + * @param node_id 请求指向的站点id + */ + void AppendQueryItem(int query_type, int node_id); + void DeleteQueryItem(int query_id); private: + /** + * UI控件 + */ Ui::CentralWidget *ui; + + /** + * 画图的场景管理器 + */ SceneManager *scene_manager; + + /** + * 请求列表中的对象 + */ + std::list query_items; + + /** + * 初始化请求展示列表 + * 展示表头的说明文字 + */ + void SetupQueryList(); + + /** + * 清除展示对象占用的内存空间 + */ + void DeleteQueryList(); };