改进完成

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/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/*

View File

@ -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<RectCom *, RectCom *> 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<RectCom *, RectCom *> 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<QString>("参数错误", "指定替换的界面不属于此界面");
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<bool>("非法操作", "
void ViewPresent::registElement(QWidget *) { throw new SimpleException<bool>("非法操作", "不允许对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<QString>("参数非法", "不允许移除隐藏的自由视图");
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) {

View File

@ -217,7 +217,7 @@ namespace SplitFrame {
// 视图展现堆栈===============================
QList<RectCom *> all_func_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);

View File

@ -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<RectCom *>(rect3));
conv->objsRelateRebuild();
conv->resetEngross(static_cast<RectCom *>(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();
}