From 2af38a4937f76884cb55e6a13c160eee7be44a03 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sat, 10 Feb 2024 15:46:21 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=BA=86=E7=BA=B5=E5=90=91?= =?UTF-8?q?=E5=88=86=E5=89=B2=E6=97=A0=E6=B3=95=E8=B0=83=E6=95=B4=E7=9A=84?= =?UTF-8?q?bug=202.=E5=88=A0=E9=99=A4=E4=BA=86=E8=A7=86=E5=9B=BE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E9=85=8D=E7=BD=AE=E6=9A=82=E6=97=B6=E4=B8=8D=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libSplitView/DockPanel.cpp | 18 +++++++++++++----- libSplitView/DockPanel.h | 4 +++- libSplitView/SplitPanel.cpp | 2 +- libSplitView/SplitWindow.cpp | 7 ++++++- libSplitView/SplitWindow.h | 2 ++ u_test/main.cpp | 5 +++-- 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/libSplitView/DockPanel.cpp b/libSplitView/DockPanel.cpp index 900bf3b..d56c8c8 100644 --- a/libSplitView/DockPanel.cpp +++ b/libSplitView/DockPanel.cpp @@ -54,6 +54,14 @@ void DragHeader::setTitle(const QString &title, const QIcon &icon) this->title_holder->setPixmap(icon.pixmap(22, 22)); } +void DragHeader::optConfig(bool retrieve, bool close) +{ + this->minimal_btn->setVisible(retrieve); + this->minimal_btn->setEnabled(retrieve); + this->close_btn->setVisible(close); + this->close_btn->setEnabled(close); +} + void DragHeader::mousePressEvent(QMouseEvent *event) { QFrame::mousePressEvent(event); @@ -82,15 +90,11 @@ void DragHeader::mouseMoveEvent(QMouseEvent *event) // =============================================================================== -DockableView::DockableView(split_frame::ResManager *mgr, QWidget *present, bool drag_header) +DockableView::DockableView(split_frame::ResManager *mgr, QWidget *present) : title_header(new DragHeader("未命名", this)), present_cube(present), manager_inst(mgr) { - if(!drag_header){ - this->title_header->setVisible(false); - } - auto layout = new QVBoxLayout(this); layout->addWidget(title_header); if(present_cube){ @@ -102,6 +106,8 @@ DockableView::DockableView(split_frame::ResManager *mgr, QWidget *present, bool layout->setSpacing(0); layout->setContentsMargins(0, 2, 0, 0); + + this->title_header->setVisible(true); this->title_header->setMinimumHeight(26); this->title_header->setMaximumHeight(26); this->title_header->setFrameShape(QFrame::Shape::Panel); @@ -123,6 +129,8 @@ void DockableView::viewConfig(bool replace, bool close, bool retrieve) this->m_replace = replace; this->m_retrieve = retrieve; this->m_close = close; + + this->title_header->optConfig(retrieve, close); } void DockableView::setTitle(const QString &title) diff --git a/libSplitView/DockPanel.h b/libSplitView/DockPanel.h index de272bc..00f842f 100644 --- a/libSplitView/DockPanel.h +++ b/libSplitView/DockPanel.h @@ -44,6 +44,8 @@ namespace dock_panel { void setTitle(const QString &title); void setTitle(const QString &title, const QIcon &icon); + void optConfig(bool retrieve, bool close); + // QWidget interface protected: virtual void mousePressEvent(QMouseEvent *event) override; @@ -61,7 +63,7 @@ namespace dock_panel { * @param present 内容视图实例 * @param custom_header 是否添加标题栏 */ - DockableView(split_frame::ResManager*mgr, QWidget *present, bool drag_header = false); + DockableView(split_frame::ResManager*mgr, QWidget *present); virtual ~DockableView(); /** * @brief 配置视图基本特性 diff --git a/libSplitView/SplitPanel.cpp b/libSplitView/SplitPanel.cpp index b43385a..a23d7db 100644 --- a/libSplitView/SplitPanel.cpp +++ b/libSplitView/SplitPanel.cpp @@ -220,7 +220,7 @@ void SplitPanel::splitter_adjust(const QPoint &pos) auto theight = split_member.first->stiffSize().height(); auto bheight = split_member.second->stiffSize().height(); if(pos.y() >= theight && pos.y() <= this->height() - bheight - std::get<2>(split_info)) - this->split_info = std::make_tuple(std::get<0>(split_info), pos.y()/this->height(), std::get<2>(split_info)); + this->split_info = std::make_tuple(std::get<0>(split_info), pos.y()/(float)this->height(), std::get<2>(split_info)); }break; } diff --git a/libSplitView/SplitWindow.cpp b/libSplitView/SplitWindow.cpp index f121471..19d0dc3 100644 --- a/libSplitView/SplitWindow.cpp +++ b/libSplitView/SplitWindow.cpp @@ -18,8 +18,13 @@ using namespace split_window; using namespace split_frame; SplitWindow::SplitWindow(QWidget *parent) - : QMainWindow(parent), active(true), accept_port(new accept_panel::AcceptPanel(this, this)), view_root(nullptr) { + : QMainWindow(parent), + active(true), + unused_stack(new QToolBar(this)), + accept_port(new accept_panel::AcceptPanel(this, this)), + view_root(nullptr) { accept_port->setVisible(false); + this->addToolBar(Qt::ToolBarArea::LeftToolBarArea, unused_stack); } SplitWindow::~SplitWindow() {this->active = false;} diff --git a/libSplitView/SplitWindow.h b/libSplitView/SplitWindow.h index d054695..fdb6425 100644 --- a/libSplitView/SplitWindow.h +++ b/libSplitView/SplitWindow.h @@ -7,6 +7,7 @@ #include #include #include +#include namespace split_window { @@ -19,6 +20,7 @@ namespace split_window { private: bool active = false; + QToolBar *const unused_stack; QList listener_list; QHash presents_store; diff --git a/u_test/main.cpp b/u_test/main.cpp index 61c3aa5..da41105 100644 --- a/u_test/main.cpp +++ b/u_test/main.cpp @@ -20,8 +20,9 @@ int main(int argc, char *argv[]) { split_window::SplitWindow w; auto spb = new split_panel::SplitPanel(&w, split_frame::SplitType::SPLIT_H_LFIRST); - auto bview = new dock_panel::DockableView(&w, new QWidget, true); - auto dview = new dock_panel::DockableView(&w, new QWidget, true); + auto bview = new dock_panel::DockableView(&w, new QWidget); + auto dview = new dock_panel::DockableView(&w, new QWidget); + dview->viewConfig(true, false, false); spb->initViews(bview, dview); w.setPresentTarget(spb);