feat/vtk-merged-dataset-column #10

Merged
gaozheng merged 40 commits from feat/vtk-merged-dataset-column into main 2026-07-01 14:48:38 +08:00
2 changed files with 16 additions and 1 deletions
Showing only changes of commit 15c30a5821 - Show all commits

View File

@ -475,10 +475,23 @@ void CategorySection::showPlaneZPopup(QToolButton* host) {
sld->setToolTip(QStringLiteral("平面高程 z"));
auto syncLabel = [lab](int v) { lab->setText(QStringLiteral("平面 z%1 米").arg(v)); };
syncLabel(sld->value());
// 发射防抖valueChanged 在拖动期逐整数步触发,每步直发 planeZChanged 会引发数十次
// removeDataset+add2DDatasetAsync 抖动重摆(生产异步路径 loadingDs_ 守护会丢中间帧→足迹滞后于陈旧 z
// 故 label/lastPlaneZ_ 即时回显,但 planeZChanged 经单发 QTimer(150ms)合并——每次变更重启,停手后只发一次终值。
// 定时器 parent=this(CategorySection),存活于 modal popup(menu.exec)之外,即便 popup 已销毁也能安全发射终值。
if (!planeZTimer_) {
planeZTimer_ = new QTimer(this);
planeZTimer_->setSingleShot(true);
planeZTimer_->setInterval(150);
connect(planeZTimer_, &QTimer::timeout, this, [this]() {
emit planeZChanged(QString::fromStdString(desc_.id), pendingPlaneZ_);
});
}
connect(sld, &QSlider::valueChanged, this, [this, syncLabel](int v) {
lastPlaneZ_ = v;
syncLabel(v);
emit planeZChanged(QString::fromStdString(desc_.id), static_cast<double>(v));
pendingPlaneZ_ = static_cast<double>(v);
planeZTimer_->start(); // 重启防抖窗口:覆盖拖动、键盘、点轨——停手后一次性发射
});
lay->addWidget(lab);
lay->addWidget(sld);

View File

@ -92,6 +92,8 @@ private:
QTimer* spinTimer_ = nullptr; // 驱动 busy 行 spinner 旋转(有 busy 行时运行)
int spinAngle_ = 0; // 当前 spinner 角度(度)
double lastPlaneZ_ = 0.0; // 上次 z 值滑块设定的平面高程(重开 popup 时回显,无则 0
QTimer* planeZTimer_ = nullptr; // z 值滑块发射防抖:拖动/键盘/点轨期合并为停手后一次重摆owned by this存活于 popup 之外)
double pendingPlaneZ_ = 0.0; // 防抖待发的平面 z定时器到点时取此值发射 planeZChanged
};
} // namespace geopro::app