feat/vtk-3d-view #7

Merged
gaozheng merged 301 commits from feat/vtk-3d-view into main 2026-06-27 18:43:52 +08:00
3 changed files with 23 additions and 11 deletions
Showing only changes of commit a990f2ea90 - Show all commits

View File

@ -35,6 +35,7 @@
#include <QComboBox> #include <QComboBox>
#include <QFrame> #include <QFrame>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QSplitter>
#include <QPushButton> #include <QPushButton>
#include <QSlider> #include <QSlider>
#include <QGraphicsOpacityEffect> #include <QGraphicsOpacityEffect>
@ -379,14 +380,22 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
} }
fieldDict->setArrayTypeEnum(std::move(e)); fieldDict->setArrayTypeEnum(std::move(e));
}); });
auto* viewRow = new QHBoxLayout(); // 左侧抽屉 | 右侧(工具条+画布)用 QSplitter左面板可拖动改宽不可拖没右侧伸缩
viewRow->setContentsMargins(0, 0, 0, 0); auto* split = new QSplitter(Qt::Horizontal);
viewRow->setSpacing(0); split->setChildrenCollapsible(false);
viewRow->addWidget(drawer); // 左侧抽屉(自带折叠按钮) split->setHandleWidth(4);
viewRow->addWidget(viewToolbar); // 画布工具条(竖排:设置/前后上下左右/缩放复位) split->addWidget(drawer);
viewRow->addWidget(vtkWidget, 1); // 右侧 GL 画布 auto* rightWrap = new QWidget();
auto* rl = new QHBoxLayout(rightWrap);
rl->setContentsMargins(0, 0, 0, 0);
rl->setSpacing(0);
rl->addWidget(viewToolbar); // 画布工具条
rl->addWidget(vtkWidget, 1); // GL 画布
split->addWidget(rightWrap);
split->setStretchFactor(0, 0);
split->setStretchFactor(1, 1);
centerLayout->addWidget(viewHeader); centerLayout->addWidget(viewHeader);
centerLayout->addLayout(viewRow, 1); centerLayout->addWidget(split, 1);
// 3b三维分析栏勾选的已保存切片(dd_slice) id 集合 + 调和函数。 // 3b三维分析栏勾选的已保存切片(dd_slice) id 集合 + 调和函数。
// syncSlices按"当前活动体 dsId"调和 InteractionManager 上显示的已保存切片—— // syncSlices按"当前活动体 dsId"调和 InteractionManager 上显示的已保存切片——

View File

@ -17,6 +17,7 @@ CategoryAnalysisTab::CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* d
auto* scroll = new QScrollArea(this); auto* scroll = new QScrollArea(this);
scroll->setWidgetResizable(true); scroll->setWidgetResizable(true);
scroll->setFrameShape(QFrame::NoFrame); scroll->setFrameShape(QFrame::NoFrame);
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 内容随面板宽自适应,不出横向滚动条
outer->addWidget(scroll, 1); outer->addWidget(scroll, 1);
auto* content = new QWidget(scroll); auto* content = new QWidget(scroll);

View File

@ -51,8 +51,9 @@ ColumnDrawer::ColumnDrawer(QWidget* parent, geopro::data::DatasetFieldDictionary
root->addWidget(body_, 1); root->addWidget(body_, 1);
root->addWidget(toggleBtn_, 0); root->addWidget(toggleBtn_, 0);
// 展开时限宽 ~318px (300 body + 18 btn) // 可调宽min 180 / max 560外层 QSplitter 拖动改宽)。
setMaximumWidth(318); setMinimumWidth(180);
setMaximumWidth(560);
} }
void ColumnDrawer::toggleCollapsed() void ColumnDrawer::toggleCollapsed()
@ -61,8 +62,9 @@ void ColumnDrawer::toggleCollapsed()
body_->setVisible(!collapsed_); body_->setVisible(!collapsed_);
toggleBtn_->setIcon(geopro::app::makeGlyph(collapsed_ ? Glyph::ChevronRight : Glyph::ChevronLeft, toggleBtn_->setIcon(geopro::app::makeGlyph(collapsed_ ? Glyph::ChevronRight : Glyph::ChevronLeft,
geopro::app::tokenColor("text/secondary"), 14)); geopro::app::tokenColor("text/secondary"), 14));
// 折叠后只保留按钮宽度;展开恢复上限 // 折叠后只保留按钮宽度;展开恢复可调范围
setMaximumWidth(collapsed_ ? 18 : 318); setMinimumWidth(collapsed_ ? 0 : 180);
setMaximumWidth(collapsed_ ? 18 : 560);
} }
void ColumnDrawer::expand() void ColumnDrawer::expand()