From 4f511a2a5d170f10b59a96acebaea49255d85b0f Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Mon, 13 Oct 2025 00:25:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=89=B9=E9=87=8F=E7=B4=A2?= =?UTF-8?q?=E5=BC=95=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ActWorld/main.cpp | 2 +- MapPresent/MapPresent.cpp | 26 +++++++++++++++++--------- MapPresent/MapPresent.h | 3 ++- MapPresent/UnitDelegate.cpp | 6 +++--- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/ActWorld/main.cpp b/ActWorld/main.cpp index 147e790..d08f075 100644 --- a/ActWorld/main.cpp +++ b/ActWorld/main.cpp @@ -12,7 +12,7 @@ int main(int argc, char* argv[]) MapPresent p; p.show(); - p.zoomTo(1); + p.zoomTo(0); //QObject::connect(&p, &MapPresent::mouseIn, [=]() { // qDebug() << "Mouse Enter"; diff --git a/MapPresent/MapPresent.cpp b/MapPresent/MapPresent.cpp index 5eff978..8359e7a 100644 --- a/MapPresent/MapPresent.cpp +++ b/MapPresent/MapPresent.cpp @@ -20,10 +20,11 @@ MapPresent::MapPresent(QWidget* parent /*= nullptr*/) _type_present_delegate[delegate->unitType()] = delegate; connect(this, &MapPresent::mouseOutNotify, delegate, &BasicUnitDelegate::hotClear); connect(this, &MapPresent::mouseHoverNotify, delegate, &BasicUnitDelegate::hotIndexSet); - connect(delegate, &BasicUnitDelegate::updateRequest, [=](const PresentIndex& idx) { - if (idx.isValid() && !_updated_index_list.contains(idx)) { - _updated_index_list.append(idx); - } + connect(delegate, &BasicUnitDelegate::updateRequest, [=](const QList& list) { + for (auto idx : list) + if (idx.isValid() && !_updated_index_list.contains(idx)) { + _updated_index_list.append(idx); + } this->update(); }); @@ -33,7 +34,7 @@ MapPresent::MapPresent(QWidget* parent /*= nullptr*/) void MapPresent::zoomTo(double percent) { - this->_scale_times = std::max(1.0 / 2, percent); + this->_scale_times = std::max(1.0 / 5, percent); this->visible_units_tidy(); this->update(); @@ -63,6 +64,11 @@ void MapPresent::setDataModel(MapDataModel* model) this->update(); } +MapDataModel* MapPresent::dataModel() const +{ + return _map_data_model; +} + PresentIndex MapPresent::indexGet(const QPointF& pos) const { QList templist; @@ -193,8 +199,9 @@ void MapPresent::mouseReleaseEvent(QMouseEvent* ev) emit this->mouseReleaseNotify(ev); } -PresentOption AssumeOpt(PresentIndex index, QRectF rf) { +PresentOption AssumeOpt(PresentIndex index, QRectF rf, MapDataModel *m) { PresentOption opt; + opt.dataModel = m; opt.index = index; opt.outline = rf; return opt; @@ -206,7 +213,7 @@ void MapPresent::visible_units_tidy() { QRectF curr_outline = this->rect(); _paint_buffer = QPixmap(curr_outline.toRect().size()); - _visible_units[_center_index] = AssumeOpt(_center_index, outlineGet(_center_index)); + _visible_units[_center_index] = AssumeOpt(_center_index, outlineGet(_center_index), _map_data_model); int visible_count = 1, deduce_x = 1; while (visible_count) { visible_count = 0; @@ -215,13 +222,13 @@ void MapPresent::visible_units_tidy() { for (auto unit : siblings) { auto visible_rect = outlineGet(unit); if (curr_outline.intersects(visible_rect)) { - _visible_units[unit] = AssumeOpt(unit, visible_rect); + _visible_units[unit] = AssumeOpt(unit, visible_rect, _map_data_model); visible_count++; } } } - for (auto optx : _visible_units) + for (auto &optx : _visible_units) _updated_index_list.append(optx.index); } @@ -297,5 +304,6 @@ PresentOption& PresentOption::operator=(const PresentOption& other) { index = other.index; outline = other.outline; + dataModel = other.dataModel; return *this; } diff --git a/MapPresent/MapPresent.h b/MapPresent/MapPresent.h index 9c8013a..3d96efd 100644 --- a/MapPresent/MapPresent.h +++ b/MapPresent/MapPresent.h @@ -91,7 +91,7 @@ signals: /// /// 更新通知/重绘请求 /// - void updateRequest(const PresentIndex& idx); + void updateRequest(const QList& idx_list); }; /// @@ -170,6 +170,7 @@ public: /// /// void setDataModel(MapDataModel* model); + MapDataModel* dataModel() const; /// /// 通过widget上定位获取绘制索引 diff --git a/MapPresent/UnitDelegate.cpp b/MapPresent/UnitDelegate.cpp index e010bf2..765cc99 100644 --- a/MapPresent/UnitDelegate.cpp +++ b/MapPresent/UnitDelegate.cpp @@ -72,7 +72,7 @@ void BasicUnitDelegate::hotClear() auto prev_idx = _hot_index; _hot_index = PresentIndex(); - emit this->updateRequest(prev_idx); + emit this->updateRequest({ prev_idx }); } void BasicUnitDelegate::hotIndexSet(const PresentIndex& idx) @@ -81,7 +81,7 @@ void BasicUnitDelegate::hotIndexSet(const PresentIndex& idx) auto prev_idx = _hot_index; _hot_index = idx; - emit this->updateRequest(prev_idx); - emit this->updateRequest(idx); + emit this->updateRequest({ prev_idx }); + emit this->updateRequest({ idx }); } }