改进完成

This commit is contained in:
玉宇清音 2023-08-27 22:29:53 +08:00
parent 7edec993f5
commit b2c2866e04
4 changed files with 89 additions and 113 deletions

40
.gitignore vendored
View File

@ -1,21 +1,21 @@
WordsIDE/release/ WordsIDE/release/*
WordsIDE/debug/ WordsIDE/debug/*
DesParser/release/ DesParser/release/*
DesParser/debug/ DesParser/debug/*
.vs/ .vs/
Testpad/debug/ Testpad/debug/*
Testpad/release/ Testpad/release/*
libConfig/debug/ libConfig/debug/*
libParse/debug/ libConfig/release/*
libParse/release/ libParse/debug/*
libProjectManager/debug/ libParse/release/*
libConfig/release/ libProjectManager/debug/*
libProjectManager/release/ libProjectManager/release/*
/u_test/release/qmake/temp /u_test/release/*
/u_test/debug /u_test/debug/*
/SplitView/debug /SplitView/debug/*
/u_test/release /SplitView/release/*
/GenericConsole/debug /GenericConsole/debug/*
/x64/Debug /GenericConsole/release/*
/x64/Release /x64/Debug/*
/GenericConsole/debug/qmake/temp /x64/Release/*

View File

@ -248,7 +248,7 @@ void ViewPresent::purge(ViewRes *target) {
all_func_views.removeAll(cinst); all_func_views.removeAll(cinst);
freedom_views.removeAll(cinst); freedom_views.removeAll(cinst);
display_members.removeAll(cinst); display_members = nullptr;
objsRelateRebuild(); objsRelateRebuild();
delete cinst; delete cinst;
@ -311,15 +311,14 @@ void ViewPresent::resetEngross(RectCom *view) {
vit->pRelease(); vit->pRelease();
temp_visible_view = std::make_pair(DockType::LEFT, nullptr); temp_visible_view = std::make_pair(DockType::LEFT, nullptr);
if (display_members.size()) display_members = nullptr;
display_members.clear();
if (freedom_views.contains(view)) if (freedom_views.contains(view))
freedom_views.removeAll(view); freedom_views.removeAll(view);
view->setParentRes(this); view->setParentRes(this);
view->bind()->setVisible(true); view->bind()->setVisible(true);
display_members << view; display_members = view;
objsRelateRebuild(); objsRelateRebuild();
} }
@ -372,25 +371,17 @@ void ViewPresent::objsRelateRebuild() {
update(); update();
} }
std::pair<RectCom *, RectCom *> ViewPresent::child() const { std::pair<RectCom *, RectCom *> ViewPresent::child() const { return std::make_pair(display_members, nullptr); }
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);
}
void ViewPresent::replaceComp(RectCom *view, RectCom *old) { void ViewPresent::replaceComp(RectCom *view, RectCom *old) {
if (!display_members.contains(old)) if (display_members != old)
throw new SimpleException<QString>("参数错误", "指定替换的界面不属于此界面"); throw new SimpleException<QString>("参数错误", "指定替换的界面不属于此界面");
if (display_members.contains(view)) if (display_members == view)
return; return;
view->setParentRes(this); view->setParentRes(this);
display_members.replace(display_members.indexOf(old), view); display_members = view;
objsRelateRebuild(); objsRelateRebuild();
} }
@ -423,14 +414,10 @@ void ViewPresent::pClose() { throw new SimpleException<bool>("非法操作", "
void ViewPresent::registElement(QWidget *) { throw new SimpleException<bool>("非法操作", "不允许对ViewPanel调用registElement"); } void ViewPresent::registElement(QWidget *) { throw new SimpleException<bool>("非法操作", "不允许对ViewPanel调用registElement"); }
void ViewPresent::setParentRes(ViewRes *) { 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) { if (temp_visible_view.second) {
temp_visible_view.second->setParentRes(this); temp_visible_view.second->setParentRes(this);
} }
@ -441,15 +428,9 @@ ViewRes *ViewPresent::parentRes() const { return nullptr; }
void ViewPresent::paintEvent(QPaintEvent *ev) { void ViewPresent::paintEvent(QPaintEvent *ev) {
QWidget::paintEvent(ev); QWidget::paintEvent(ev);
if (display_members.size() == 2) { if (display_members) {
QPainter p(this); display_members->bind()->setVisible(true);
auto handle_rect = this->handle_rect(); display_members->bind()->update();
p.fillRect(handle_rect, QBrush(Qt::gray));
}
for (auto &it : display_members) {
it->bind()->setVisible(true);
it->bind()->update();
} }
if (temp_visible_view.second) { if (temp_visible_view.second) {
@ -477,10 +458,10 @@ void ViewPresent::removeComp(RectCom *child_inst) {
for (auto &lsn : lsn_list) for (auto &lsn : lsn_list)
lsn->freedomRemoved(child_inst); lsn->freedomRemoved(child_inst);
} else { } else {
if (!display_members.contains(child_inst)) if (display_members != child_inst)
throw new SimpleException<QString>("参数非法", "不允许移除隐藏的自由视图"); throw new SimpleException<QString>("参数非法", "不允许移除隐藏的自由视图");
display_members.removeAll(child_inst); display_members = nullptr;
} }
child_inst->setParentRes(nullptr); child_inst->setParentRes(nullptr);
@ -533,13 +514,8 @@ void ViewPresent::mouseMoveEvent(QMouseEvent *event) {
} }
void ViewPresent::relayout() { void ViewPresent::relayout() {
auto rects = view_rects(); if (display_members) {
display_members->relayout(this->rect());
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 (temp_visible_view.second) { if (temp_visible_view.second) {

View File

@ -217,7 +217,7 @@ namespace SplitFrame {
// 视图展现堆栈=============================== // 视图展现堆栈===============================
QList<RectCom *> all_func_views; QList<RectCom *> all_func_views;
QList<RectCom *> freedom_views; QList<RectCom *> freedom_views;
QList<RectCom *> display_members; RectCom *display_members = nullptr;
std::pair<DockType, RectCom *> temp_visible_view = std::make_pair(DockType::LEFT, nullptr); std::pair<DockType, RectCom *> temp_visible_view = std::make_pair(DockType::LEFT, nullptr);

View File

@ -20,64 +20,64 @@ enum class XEnum { ONE, TWO };
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
QApplication a(argc, argv); QApplication a(argc, argv);
qDebug() << QString("%1").arg((int)XEnum::ONE); // qDebug() << QString("%1").arg((int)XEnum::ONE);
// auto win = new QMainWindow(); auto win = new QMainWindow();
// win->setMinimumSize(800, 600); win->setMinimumSize(800, 600);
// win->menuBar()->addMenu("文件"); win->menuBar()->addMenu("文件");
// auto tbar = new QToolBar(); auto tbar = new QToolBar();
// win->addToolBar(Qt::ToolBarArea::LeftToolBarArea, tbar); win->addToolBar(Qt::ToolBarArea::LeftToolBarArea, tbar);
// auto conv = new ViewPresent(); auto conv = new ViewPresent();
// auto aview = new XWidget(conv, Qt::black); auto aview = new XWidget(conv, Qt::black);
// auto bview = new XWidget(conv, Qt::green); auto bview = new XWidget(conv, Qt::green);
// auto cview = new XWidget(conv, Qt::yellow); auto cview = new XWidget(conv, Qt::yellow);
// auto dview = new YWidget(conv); auto dview = new YWidget(conv);
// auto rect0 = conv->appendView(aview, QIcon(), "hello0"); auto rect0 = conv->appendView(aview, QIcon(), "hello0");
// auto rect1 = conv->appendView(bview, QIcon(), "hello1"); auto rect1 = conv->appendView(bview, QIcon(), "hello1");
// auto rect2 = conv->appendView(cview, QIcon(), "hello2"); auto rect2 = conv->appendView(cview, QIcon(), "hello2");
// auto rect3 = conv->appendView(dview, QIcon(), "hello3"); auto rect3 = conv->appendView(dview, QIcon(), "hello3");
// conv->markFreedom(rect0); conv->markFreedom(rect0);
// conv->markFreedom(rect1); conv->markFreedom(rect1);
// conv->markFreedom(rect2); conv->markFreedom(rect2);
// conv->markFreedom(rect3); conv->markFreedom(rect3);
// conv->objsRelateRebuild(); conv->objsRelateRebuild();
// conv->resetEngross(static_cast<RectCom *>(rect3)); conv->resetEngross(static_cast<RectCom *>(rect3));
// win->setCentralWidget(conv->bind()); win->setCentralWidget(conv->bind());
// auto b_left = tbar->addAction("左侧添加"); auto b_left = tbar->addAction("左侧添加");
// win->connect(b_left, &QAction::triggered, [=](bool v) { win->connect(b_left, &QAction::triggered, [=](bool v) {
// auto items = conv->freedomViews(); auto items = conv->freedomViews();
// if (items.size()) { if (items.size()) {
// conv->temporaryVisible(SplitFrame::DockType::LEFT, items.last()); conv->temporaryVisible(SplitFrame::DockType::LEFT, items.last());
// } }
// }); });
// auto b_right = tbar->addAction(" 右侧添加"); auto b_right = tbar->addAction(" 右侧添加");
// win->connect(b_right, &QAction::triggered, [=](bool v) { win->connect(b_right, &QAction::triggered, [=](bool v) {
// auto items = conv->freedomViews(); auto items = conv->freedomViews();
// if (items.size()) { if (items.size()) {
// conv->temporaryVisible(SplitFrame::DockType::RIGHT, items.last()); conv->temporaryVisible(SplitFrame::DockType::RIGHT, items.last());
// } }
// }); });
// auto b_top = tbar->addAction("上侧添加"); auto b_top = tbar->addAction("上侧添加");
// win->connect(b_top, &QAction::triggered, [=](bool v) { win->connect(b_top, &QAction::triggered, [=](bool v) {
// auto items = conv->freedomViews(); auto items = conv->freedomViews();
// if (items.size()) { if (items.size()) {
// conv->temporaryVisible(SplitFrame::DockType::TOP, items.last()); conv->temporaryVisible(SplitFrame::DockType::TOP, items.last());
// } }
// }); });
// auto b_bottom = tbar->addAction("下侧添加"); auto b_bottom = tbar->addAction("下侧添加");
// win->connect(b_bottom, &QAction::triggered, [=](bool v) { win->connect(b_bottom, &QAction::triggered, [=](bool v) {
// auto items = conv->freedomViews(); auto items = conv->freedomViews();
// if (items.size()) { if (items.size()) {
// conv->temporaryVisible(SplitFrame::DockType::BOTTOM, items.last()); conv->temporaryVisible(SplitFrame::DockType::BOTTOM, items.last());
// } }
// }); });
// win->show(); win->show();
return a.exec(); return a.exec();
} }