diff --git a/.gitignore b/.gitignore index fccb48b..1786480 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,21 @@ -WordsIDE/release/ -WordsIDE/debug/ -DesParser/release/ -DesParser/debug/ +WordsIDE/release/* +WordsIDE/debug/* +DesParser/release/* +DesParser/debug/* .vs/ -Testpad/debug/ -Testpad/release/ -libConfig/debug/ -libParse/debug/ -libParse/release/ -libProjectManager/debug/ -libConfig/release/ -libProjectManager/release/ -/u_test/release/qmake/temp -/u_test/debug -/SplitView/debug -/u_test/release -/GenericConsole/debug -/x64/Debug -/x64/Release -/GenericConsole/debug/qmake/temp +Testpad/debug/* +Testpad/release/* +libConfig/debug/* +libConfig/release/* +libParse/debug/* +libParse/release/* +libProjectManager/debug/* +libProjectManager/release/* +/u_test/release/* +/u_test/debug/* +/SplitView/debug/* +/SplitView/release/* +/GenericConsole/debug/* +/GenericConsole/release/* +/x64/Debug/* +/x64/Release/* \ No newline at end of file diff --git a/libSplitView/splitpanel.cpp b/libSplitView/splitpanel.cpp index 05143d5..a51b96a 100644 --- a/libSplitView/splitpanel.cpp +++ b/libSplitView/splitpanel.cpp @@ -248,7 +248,7 @@ void ViewPresent::purge(ViewRes *target) { all_func_views.removeAll(cinst); freedom_views.removeAll(cinst); - display_members.removeAll(cinst); + display_members = nullptr; objsRelateRebuild(); delete cinst; @@ -311,15 +311,14 @@ void ViewPresent::resetEngross(RectCom *view) { vit->pRelease(); temp_visible_view = std::make_pair(DockType::LEFT, nullptr); - if (display_members.size()) - display_members.clear(); + display_members = nullptr; if (freedom_views.contains(view)) freedom_views.removeAll(view); view->setParentRes(this); view->bind()->setVisible(true); - display_members << view; + display_members = view; objsRelateRebuild(); } @@ -372,25 +371,17 @@ void ViewPresent::objsRelateRebuild() { update(); } -std::pair ViewPresent::child() const { - RectCom *inst0 = nullptr, *inst1 = nullptr; - if (display_members.size() > 1) - inst1 = display_members[1]; - if (display_members.size() > 0) - inst0 = display_members[0]; - - return std::make_pair(inst0, inst1); -} +std::pair ViewPresent::child() const { return std::make_pair(display_members, nullptr); } void ViewPresent::replaceComp(RectCom *view, RectCom *old) { - if (!display_members.contains(old)) + if (display_members != old) throw new SimpleException("参数错误", "指定替换的界面不属于此界面"); - if (display_members.contains(view)) + if (display_members == view) return; view->setParentRes(this); - display_members.replace(display_members.indexOf(old), view); + display_members = view; objsRelateRebuild(); } @@ -423,14 +414,10 @@ void ViewPresent::pClose() { throw new SimpleException("非法操作", " void ViewPresent::registElement(QWidget *) { throw new SimpleException("非法操作", "不允许对ViewPanel调用registElement"); } void ViewPresent::setParentRes(ViewRes *) { - auto pair = child(); + if (display_members) { + display_members->setParentRes(this); + } - if (pair.first) { - pair.first->setParentRes(this); - } - if (pair.second) { - pair.second->setParentRes(this); - } if (temp_visible_view.second) { temp_visible_view.second->setParentRes(this); } @@ -441,15 +428,9 @@ ViewRes *ViewPresent::parentRes() const { return nullptr; } void ViewPresent::paintEvent(QPaintEvent *ev) { QWidget::paintEvent(ev); - if (display_members.size() == 2) { - QPainter p(this); - auto handle_rect = this->handle_rect(); - p.fillRect(handle_rect, QBrush(Qt::gray)); - } - - for (auto &it : display_members) { - it->bind()->setVisible(true); - it->bind()->update(); + if (display_members) { + display_members->bind()->setVisible(true); + display_members->bind()->update(); } if (temp_visible_view.second) { @@ -477,10 +458,10 @@ void ViewPresent::removeComp(RectCom *child_inst) { for (auto &lsn : lsn_list) lsn->freedomRemoved(child_inst); } else { - if (!display_members.contains(child_inst)) + if (display_members != child_inst) throw new SimpleException("参数非法", "不允许移除隐藏的自由视图"); - display_members.removeAll(child_inst); + display_members = nullptr; } child_inst->setParentRes(nullptr); @@ -533,13 +514,8 @@ void ViewPresent::mouseMoveEvent(QMouseEvent *event) { } void ViewPresent::relayout() { - auto rects = view_rects(); - - if (display_members.size() == 2) { - display_members[0]->relayout(rects.first.toRect()); - display_members[1]->relayout(rects.second.toRect()); - } else if (display_members.size() == 1) { - display_members[0]->relayout(this->rect()); + if (display_members) { + display_members->relayout(this->rect()); } if (temp_visible_view.second) { diff --git a/libSplitView/splitpanel.h b/libSplitView/splitpanel.h index 287b924..49ac196 100644 --- a/libSplitView/splitpanel.h +++ b/libSplitView/splitpanel.h @@ -217,7 +217,7 @@ namespace SplitFrame { // 视图展现堆栈=============================== QList all_func_views; QList freedom_views; - QList display_members; + RectCom *display_members = nullptr; std::pair temp_visible_view = std::make_pair(DockType::LEFT, nullptr); diff --git a/u_test/main.cpp b/u_test/main.cpp index f03fb15..658e492 100644 --- a/u_test/main.cpp +++ b/u_test/main.cpp @@ -20,64 +20,64 @@ enum class XEnum { ONE, TWO }; int main(int argc, char *argv[]) { QApplication a(argc, argv); - qDebug() << QString("%1").arg((int)XEnum::ONE); + // qDebug() << QString("%1").arg((int)XEnum::ONE); - // auto win = new QMainWindow(); - // win->setMinimumSize(800, 600); - // win->menuBar()->addMenu("文件"); - // auto tbar = new QToolBar(); - // win->addToolBar(Qt::ToolBarArea::LeftToolBarArea, tbar); + auto win = new QMainWindow(); + win->setMinimumSize(800, 600); + win->menuBar()->addMenu("文件"); + auto tbar = new QToolBar(); + win->addToolBar(Qt::ToolBarArea::LeftToolBarArea, tbar); - // auto conv = new ViewPresent(); - // auto aview = new XWidget(conv, Qt::black); - // auto bview = new XWidget(conv, Qt::green); - // auto cview = new XWidget(conv, Qt::yellow); - // auto dview = new YWidget(conv); + auto conv = new ViewPresent(); + auto aview = new XWidget(conv, Qt::black); + auto bview = new XWidget(conv, Qt::green); + auto cview = new XWidget(conv, Qt::yellow); + auto dview = new YWidget(conv); - // auto rect0 = conv->appendView(aview, QIcon(), "hello0"); - // auto rect1 = conv->appendView(bview, QIcon(), "hello1"); - // auto rect2 = conv->appendView(cview, QIcon(), "hello2"); - // auto rect3 = conv->appendView(dview, QIcon(), "hello3"); - // conv->markFreedom(rect0); - // conv->markFreedom(rect1); - // conv->markFreedom(rect2); - // conv->markFreedom(rect3); + auto rect0 = conv->appendView(aview, QIcon(), "hello0"); + auto rect1 = conv->appendView(bview, QIcon(), "hello1"); + auto rect2 = conv->appendView(cview, QIcon(), "hello2"); + auto rect3 = conv->appendView(dview, QIcon(), "hello3"); + conv->markFreedom(rect0); + conv->markFreedom(rect1); + conv->markFreedom(rect2); + conv->markFreedom(rect3); - // conv->objsRelateRebuild(); - // conv->resetEngross(static_cast(rect3)); + conv->objsRelateRebuild(); + conv->resetEngross(static_cast(rect3)); - // win->setCentralWidget(conv->bind()); + win->setCentralWidget(conv->bind()); - // auto b_left = tbar->addAction("左侧添加"); - // win->connect(b_left, &QAction::triggered, [=](bool v) { - // auto items = conv->freedomViews(); - // if (items.size()) { - // conv->temporaryVisible(SplitFrame::DockType::LEFT, items.last()); - // } - // }); - // auto b_right = tbar->addAction(" 右侧添加"); - // win->connect(b_right, &QAction::triggered, [=](bool v) { - // auto items = conv->freedomViews(); - // if (items.size()) { - // conv->temporaryVisible(SplitFrame::DockType::RIGHT, items.last()); - // } - // }); - // auto b_top = tbar->addAction("上侧添加"); - // win->connect(b_top, &QAction::triggered, [=](bool v) { - // auto items = conv->freedomViews(); - // if (items.size()) { - // conv->temporaryVisible(SplitFrame::DockType::TOP, items.last()); - // } - // }); - // auto b_bottom = tbar->addAction("下侧添加"); - // win->connect(b_bottom, &QAction::triggered, [=](bool v) { - // auto items = conv->freedomViews(); - // if (items.size()) { - // conv->temporaryVisible(SplitFrame::DockType::BOTTOM, items.last()); - // } - // }); + auto b_left = tbar->addAction("左侧添加"); + win->connect(b_left, &QAction::triggered, [=](bool v) { + auto items = conv->freedomViews(); + if (items.size()) { + conv->temporaryVisible(SplitFrame::DockType::LEFT, items.last()); + } + }); + auto b_right = tbar->addAction(" 右侧添加"); + win->connect(b_right, &QAction::triggered, [=](bool v) { + auto items = conv->freedomViews(); + if (items.size()) { + conv->temporaryVisible(SplitFrame::DockType::RIGHT, items.last()); + } + }); + auto b_top = tbar->addAction("上侧添加"); + win->connect(b_top, &QAction::triggered, [=](bool v) { + auto items = conv->freedomViews(); + if (items.size()) { + conv->temporaryVisible(SplitFrame::DockType::TOP, items.last()); + } + }); + auto b_bottom = tbar->addAction("下侧添加"); + win->connect(b_bottom, &QAction::triggered, [=](bool v) { + auto items = conv->freedomViews(); + if (items.size()) { + conv->temporaryVisible(SplitFrame::DockType::BOTTOM, items.last()); + } + }); - // win->show(); + win->show(); return a.exec(); }