From 09314905b46a1cbc5278d82232f85b9967decdaa Mon Sep 17 00:00:00 2001 From: w-mj Date: Mon, 25 Dec 2017 22:39:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A2=E8=BD=A6=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- car.cpp | 5 +++++ car.h | 3 ++- parkingLotManager.cpp | 16 +++++++++++++--- parkingLotManager.h | 4 +++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/car.cpp b/car.cpp index 5d01f38..66dcbb1 100644 --- a/car.cpp +++ b/car.cpp @@ -303,6 +303,11 @@ void Car::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) event->accept(); } +void Car::requestSpace() +{ + emit queueHead(this); +} + int Car::getTargetFloor() const { return targetFloor; diff --git a/car.h b/car.h index 0b9668a..d180ec1 100644 --- a/car.h +++ b/car.h @@ -75,9 +75,10 @@ public: void leaveProbability(int p); void setPlateNumber(const QString &number); - void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + void requestSpace(void); + private: Status m_status; Color m_color; //车身颜色 N为0, 顺时针递增 diff --git a/parkingLotManager.cpp b/parkingLotManager.cpp index bd5e954..3789fd0 100644 --- a/parkingLotManager.cpp +++ b/parkingLotManager.cpp @@ -182,6 +182,7 @@ void ParkingLotManager::requestOut(Car *car, int exit) else p = m_graph[car->getCurrentFloor()]-> findPath(NODE_TYPE::space, car->getNum(), NODE_TYPE::stair, exit); + m_pool.append(qMakePair(car->getCurrentFloor(), car->getNum() - 1)); car->setNum(-exit); // 负数代表出口 car->setPath(p); car->setTargetFloor(1); @@ -234,7 +235,7 @@ void ParkingLotManager::requestIn(Car* car) p = m_graph[1]->findPath(NODE_TYPE::queueHead, entry, NODE_TYPE::stair, entry); } // drawPath(p); - m_waitting[entry - 1].removeOne(car); // 移除等候 + m_waitting[entry - 1].pop_front(); // 移除等候 m_cars[l][n - 1] = car; car->setPath(p); car->setTargetFloor(l); @@ -253,9 +254,18 @@ void ParkingLotManager::leave(Car* car) { int l = car->getCurrentFloor(); int n = car->getNum(); - m_pool.append(qMakePair(l, n)); + m_widgets[l - 1]->getSpaceList()[n - 1]->setSituation(ParkingSpaceWidget::occupied); Log::i(QString("有车离开,当前共有%1个空车位").arg(m_pool.size())); - emit carLeave(); + + for (uint i = 0 ; i < m_num_of_entry; i++) { + if (m_waitting[lastInEntry].size() == 0) + lastInEntry = (lastInEntry + 1) % m_num_of_entry ; + else { + Car *c = m_waitting[lastInEntry][0]; + c->requestSpace(); + } + } + car->hide(); m_all_cars.removeOne(car); delete car; diff --git a/parkingLotManager.h b/parkingLotManager.h index 915a4a1..e579af3 100644 --- a/parkingLotManager.h +++ b/parkingLotManager.h @@ -69,9 +69,11 @@ private: bool m_showGraph = false; // 是否显示图 void generatePool(bool sequence); - void periodWork(void); + int lastInEntry = 0; + + signals: void enableUpButton(bool); void enableDownButton(bool);