从项目操作(创建、打开、关闭、保存)到文件操作(新建、打开、删除、显示编辑)机制完成
This commit is contained in:
parent
fc86521d1e
commit
165d7f85f1
|
@ -6,5 +6,5 @@ SUBDIRS += \
|
|||
WordsIDE \
|
||||
libConfig \
|
||||
libProjectManager \
|
||||
libTextEdit \
|
||||
# libTextEdit \
|
||||
u_test
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.15.0, 2023-09-01T00:30:22. -->
|
||||
<!-- Written by QtCreator 4.15.0, 2023-09-04T07:38:38. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
|
|
@ -24,10 +24,7 @@ void NewProject::fromText(const QString &line) {
|
|||
name_val = list[1];
|
||||
}
|
||||
|
||||
NewPackage::NewPackage(const QString &path_string)
|
||||
{
|
||||
sequence = path_string.split("/");
|
||||
}
|
||||
NewPackage::NewPackage(const QString &path_string) { sequence = path_string.split("/", QString::SplitBehavior::SkipEmptyParts); }
|
||||
|
||||
QString NewPackage::name() const
|
||||
{
|
||||
|
@ -188,3 +185,23 @@ void CloseProject::run(Schedule::CommandsDispatcher *core) const {
|
|||
QString CloseProject::toText() const { return ""; }
|
||||
|
||||
void CloseProject::fromText(const QString &line) {}
|
||||
|
||||
DeleteTarget::DeleteTarget(const Core::Route &target) : node_path(target) {}
|
||||
|
||||
DeleteTarget::DeleteTarget(const QModelIndex &target) : node_index(target) {}
|
||||
|
||||
QString DeleteTarget::name() const { return NAME(DeleteTarget); }
|
||||
|
||||
void DeleteTarget::run(Schedule::CommandsDispatcher *core) const {
|
||||
auto vmgr = core->get<DocumentsManager>(NAME(DocumentsManager));
|
||||
if (!node_index.isValid())
|
||||
vmgr->deleteNode(node_path);
|
||||
else {
|
||||
auto node_path = vmgr->convertPath(node_index);
|
||||
vmgr->deleteNode(node_path);
|
||||
}
|
||||
}
|
||||
|
||||
QString DeleteTarget::toText() const { return node_path.links().join("/"); }
|
||||
|
||||
void DeleteTarget::fromText(const QString &line) { Route::collect(line.split("/", QString::SplitBehavior::SkipEmptyParts)); }
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "route.h"
|
||||
|
||||
#include <QModelIndex>
|
||||
#include <commandsdispatcher.h>
|
||||
|
||||
namespace Presents {
|
||||
|
@ -85,8 +86,26 @@ namespace CommandList {
|
|||
virtual QString toText() const override;
|
||||
virtual void fromText(const QString &line) override;
|
||||
};
|
||||
|
||||
class DeleteTarget : public Schedule::GeCommand {
|
||||
public:
|
||||
DeleteTarget(const Core::Route &target);
|
||||
DeleteTarget(const QModelIndex &target);
|
||||
|
||||
// GeCommand interface
|
||||
public:
|
||||
virtual QString name() const override;
|
||||
virtual void run(Schedule::CommandsDispatcher *core) const override;
|
||||
virtual QString toText() const override;
|
||||
virtual void fromText(const QString &line) override;
|
||||
|
||||
private:
|
||||
QModelIndex node_index = QModelIndex();
|
||||
Core::Route node_path;
|
||||
};
|
||||
|
||||
class OpenFile : public Schedule::GeCommand {
|
||||
public:
|
||||
public:
|
||||
OpenFile(const Core::Route &path_node);
|
||||
OpenFile(const QFileInfo &f);
|
||||
|
||||
|
|
|
@ -97,9 +97,14 @@ void DocumentsManager::openFile(const QList<Route> &doc_paths) {
|
|||
view->load(info);
|
||||
view->applySetting(it.links().last());
|
||||
|
||||
for (auto con : present_ui)
|
||||
if (con->avaliable(view))
|
||||
for (auto &con : present_ui)
|
||||
if (con->avaliable(view)) {
|
||||
con->append(view);
|
||||
return;
|
||||
}
|
||||
|
||||
// 默认第一个打开
|
||||
present_ui.first()->append(view);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +163,7 @@ QList<Route> DocumentsManager::actives() const { return doc_openning.keys(); }
|
|||
void DocumentsManager::active(const Core::Route &node_path) {
|
||||
if (doc_openning.contains(node_path)) {
|
||||
auto inst = convertPresent(node_path);
|
||||
for (auto vit : present_ui)
|
||||
for (auto &vit : present_ui)
|
||||
if (vit->contains(inst))
|
||||
vit->active(inst);
|
||||
}
|
||||
|
|
|
@ -26,9 +26,11 @@ PresentContainerView::PresentContainerView(ViewPresent *host)
|
|||
layout->addWidget(title_store, 0, 0, 1, 3);
|
||||
layout->addWidget(close_btn, 0, 3);
|
||||
close_btn->setMaximumSize(QSize(30, 30));
|
||||
close_btn->setEnabled(false);
|
||||
|
||||
items_store << welcome_list;
|
||||
stack_container->addWidget(welcome_list->widget());
|
||||
layout->addWidget(stack_container, 1, 0, 1, 4);
|
||||
title_store->addItem(welcome_list->name());
|
||||
|
||||
layout->setRowStretch(0, 0);
|
||||
|
@ -51,12 +53,15 @@ void PresentContainerView::append(FilePresent *ins) {
|
|||
if (!items_store.contains(ins)) {
|
||||
items_store.append(ins);
|
||||
title_store->addItem(ins->name());
|
||||
ins->widget()->setParent(nullptr);
|
||||
stack_container->addWidget(ins->widget());
|
||||
}
|
||||
|
||||
throw new SimpleException<bool>("非法操作", "重复添加视图:" + ins->name());
|
||||
active(ins);
|
||||
} else
|
||||
throw new SimpleException<bool>("非法操作", "重复添加视图:" + ins->name());
|
||||
}
|
||||
|
||||
#include <QDebug>
|
||||
bool PresentContainerView::active(const FilePresent *ins) {
|
||||
if (!items_store.contains(ins))
|
||||
return false;
|
||||
|
@ -87,9 +92,10 @@ bool PresentContainerView::contains(const FilePresent *ins) const {
|
|||
}
|
||||
|
||||
bool PresentContainerView::avaliable(FilePresent *vins) {
|
||||
if (!QApplication::activeWindow())
|
||||
auto global_test = QApplication::activeWindow();
|
||||
if (!global_test)
|
||||
return true;
|
||||
return this->hasFocus();
|
||||
return this->isActiveWindow();
|
||||
}
|
||||
|
||||
void PresentContainerView::change_view(int view_index) {
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "manager_docs.h"
|
||||
#include <QPushButton>
|
||||
#include <QStackedLayout>
|
||||
#include <QStackedWidget>
|
||||
#include <splitpanel.h>
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ void ProjectView::menu_popup(const QPoint &p)
|
|||
}
|
||||
|
||||
m.addSeparator();
|
||||
m.addAction("移除节点");
|
||||
m.addAction("移除节点", [&index, this]() { source->postCommand(DeleteTarget(index)); });
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ QString StorySourceEdit::file_suffix = "storyboard";
|
|||
|
||||
StorySourceEdit::StorySourceEdit(DocumentsManager *mgr, const Route &p, QObject *parent)
|
||||
: FilePresent(parent), mgr_inst(mgr), path_store(p), edit_square(new QTextEdit) {
|
||||
// words_highlighter->setDocument(this->edit_square->document());
|
||||
connect(edit_square, &QTextEdit::textChanged, [this](){
|
||||
emit this->dataChanged(filepath_store);
|
||||
});
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
#include "welcomepanel.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
using namespace Core;
|
||||
using namespace Presents;
|
||||
|
||||
WelcomePanel::WelcomePanel(QWidget *parent) : QWidget(parent) {}
|
||||
|
||||
void WelcomePanel::paintEvent(QPaintEvent *event) {
|
||||
QPainter p(this);
|
||||
p.fillRect(this->rect(), Qt::green);
|
||||
}
|
||||
|
||||
QWidget *WelcomePanel::widget() const { return (QWidget *)this; }
|
||||
|
||||
QString WelcomePanel::name() const { return "WelcomePanel"; }
|
||||
|
|
|
@ -11,6 +11,9 @@ namespace Presents {
|
|||
public:
|
||||
WelcomePanel(QWidget *parent = nullptr);
|
||||
|
||||
protected:
|
||||
virtual void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
// FilePresent interface
|
||||
public:
|
||||
virtual QWidget *widget() const override;
|
||||
|
|
|
@ -50,6 +50,7 @@ void XApp::init_commands(Schedule::CommandsDispatcher *host) {
|
|||
host->registerCommand(new OpenFile(Route()));
|
||||
host->registerCommand(new OpenProject(""));
|
||||
host->registerCommand(new SaveAll());
|
||||
host->registerCommand(new DeleteTarget(Route()));
|
||||
}
|
||||
|
||||
CommandsDispatcher *const XApp::disp_core = new CommandsDispatcher(QDir("./"), true);
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
#include "blockdatas.h"
|
||||
|
||||
using namespace PresentDatas;
|
||||
|
||||
DisplayGroup::DisplayGroup(const QString &uid) : SpecificEntityData(EntityType::DISPLAY_GROUP, uid) {}
|
||||
|
||||
QString DisplayGroup::styledText() const {
|
||||
QString retvs = QString("<group id='%1'>\n").arg(this->uID());
|
||||
for (auto &i : children())
|
||||
retvs += i->styledText();
|
||||
|
||||
retvs += "</group>\n";
|
||||
return retvs;
|
||||
}
|
||||
|
||||
QString DisplayGroup::plainText() const {
|
||||
QString retvs = "";
|
||||
for (auto &i : children())
|
||||
retvs += i->plainText();
|
||||
retvs += "\n";
|
||||
return retvs;
|
||||
}
|
||||
|
||||
TextRange::TextRange(const QString &uid) : SpecificEntityData(EntityType::TEXT_RANGE, uid) {}
|
|
@ -0,0 +1,46 @@
|
|||
#ifndef BLOCKDATAS_H
|
||||
#define BLOCKDATAS_H
|
||||
|
||||
#include "entitydata.h"
|
||||
|
||||
namespace PresentDatas {
|
||||
/* enum class EntityType {
|
||||
TEXT_RANGE, // 字符集合,包含段落和句子
|
||||
IMAGE_CUBE, // 图片展示块
|
||||
HREF_FRAGS, // 超链接
|
||||
TABLE_VIEW, // 表格视图
|
||||
LIST_VIEW, // 列表视图
|
||||
INTERACTIVE_EXTENSION, // 交互式拓展插件视图
|
||||
DISPLAY_GROUP, // 元素混合组织成包
|
||||
DOCUMENT_ENTITY
|
||||
};*/
|
||||
|
||||
class DisplayGroup : public SpecificEntityData {
|
||||
public:
|
||||
DisplayGroup(const QString &uid);
|
||||
|
||||
public:
|
||||
// EntityData interface
|
||||
public:
|
||||
virtual QString styledText() const override;
|
||||
virtual QString plainText() const override;
|
||||
};
|
||||
|
||||
class TextRange : public SpecificEntityData {
|
||||
public:
|
||||
TextRange(const QString &uid);
|
||||
|
||||
void setStyledText(const QString &content);
|
||||
void setPlainText(const QString &content);
|
||||
|
||||
// EntityData interface
|
||||
public:
|
||||
virtual QString styledText() const override;
|
||||
virtual QString plainText() const override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
} // namespace PresentDatas
|
||||
|
||||
#endif // BLOCKDATAS_H
|
|
@ -1,12 +1,22 @@
|
|||
#include "entitydata.h"
|
||||
|
||||
#include <QList>
|
||||
using namespace PresentDatas;
|
||||
|
||||
SpecificEntityData::SpecificEntityData(EntityType type, const QString &uid) : type_store(type), document_id(uid) {}
|
||||
SpecificEntityData::SpecificEntityData(EntityType type, const QString &uid) : type_store(type), document_id(uid) {
|
||||
visible_bool = true;
|
||||
oritation_store = MemberOri::H_LEFT_TO_RIGHT;
|
||||
}
|
||||
|
||||
void SpecificEntityData::resetContentLayout(MemberOri oritation, MemberType child_type) {
|
||||
this->oritation_store = oritation;
|
||||
this->layout_type = child_type;
|
||||
this->layout_type = MemberType::BLOCKS;
|
||||
this->anchor_info = std::make_tuple(AnchorTarget::NONE, nullptr, AnchorPos::POINT_LEFT_TOP, 0, 0);
|
||||
this->size_min = QSizeF(20, 20);
|
||||
}
|
||||
|
||||
void SpecificEntityData::setVisible(bool state){
|
||||
this->visible_bool = state;
|
||||
}
|
||||
|
||||
void SpecificEntityData::setAnchorTo(AnchorTarget type, EntityData *tptr) {
|
||||
|
@ -17,6 +27,21 @@ void SpecificEntityData::setAnchorPos(AnchorPos point, offset_h hoffset, offset_
|
|||
anchor_info = std::make_tuple(std::get<0>(anchor_info), std::get<1>(anchor_info), point, hoffset, v_offset);
|
||||
}
|
||||
|
||||
void SpecificEntityData::insertChild(EntityData *inst, int index) {
|
||||
if (index >= 0 && index < children_store.size())
|
||||
this->children_store.insert(index, inst);
|
||||
else
|
||||
this->children_store.append(inst);
|
||||
}
|
||||
|
||||
void SpecificEntityData::removeChild(EntityData *inst) { this->children_store.removeAll(inst); }
|
||||
|
||||
void SpecificEntityData::setMinSizeHint(const QSizeF &hint) { this->size_min = hint; }
|
||||
|
||||
void SpecificEntityData::setMaxSizeHint(const QSizeF &hint) { this->size_max = hint; }
|
||||
|
||||
void SpecificEntityData::setStretchHint(const std::pair<float, float> &hint) { this->stretch_pair = hint; }
|
||||
|
||||
QString SpecificEntityData::uID() const { return document_id; }
|
||||
|
||||
EntityType SpecificEntityData::type() const { return type_store; }
|
||||
|
@ -33,8 +58,40 @@ std::tuple<AnchorPos, EntityData::offset_h, EntityData::offset_v> SpecificEntity
|
|||
return std::make_tuple(std::get<2>(anchor_info), std::get<3>(anchor_info), std::get<4>(anchor_info));
|
||||
}
|
||||
|
||||
DocumentData::DocumentData(const QString &name) : SpecificEntityData(EntityType::DOCUMENT_ENTITY, "Document-Unique") {
|
||||
QList<EntityData *> SpecificEntityData::children() const { return children_store; }
|
||||
|
||||
bool SpecificEntityData::isVisible() const { return visible_bool; }
|
||||
|
||||
QSizeF SpecificEntityData::minSizeHint() const { return this->size_min; }
|
||||
|
||||
QSizeF SpecificEntityData::maxSizeHint() const { return this->size_max; }
|
||||
|
||||
std::pair<float, float> SpecificEntityData::sizeStretchHint() const { return stretch_pair; }
|
||||
|
||||
Document::Document(const QString &name) : SpecificEntityData(EntityType::DOCUMENT_ENTITY, "Document-Unique") {
|
||||
resetContentLayout(MemberOri::H_LEFT_TO_RIGHT, MemberType::BLOCKS);
|
||||
}
|
||||
|
||||
void DocumentData::resetContentLayout(MemberOri oritation, MemberType) { SpecificEntityData::resetContentLayout(oritation, MemberType::BLOCKS); }
|
||||
QString Document::styledText() const
|
||||
{
|
||||
QString values = "<docment type = '7' visible='true' >\n";
|
||||
for(auto &i : children())
|
||||
values += i->styledText();
|
||||
values += "</document>";
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
QString Document::plainText() const
|
||||
{
|
||||
QString values = "";
|
||||
for(auto &i : children())
|
||||
if(i->isVisible())
|
||||
values += i->plainText();
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Document::resetContentLayout(MemberOri oritation, MemberType) { SpecificEntityData::resetContentLayout(oritation, MemberType::BLOCKS); }
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef ENTITYDATA_H
|
||||
#define ENTITYDATA_H
|
||||
|
||||
#include <QList>
|
||||
#include <QRectF>
|
||||
#include <QString>
|
||||
#include <tuple>
|
||||
|
@ -124,19 +125,9 @@ namespace PresentDatas {
|
|||
*/
|
||||
virtual std::tuple<AnchorPos, offset_h, offset_v> anchorPos() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 计算最小尺寸
|
||||
* @param outline
|
||||
* @return
|
||||
*/
|
||||
virtual QSizeF minSizeHint(const QRectF &outline) const = 0;
|
||||
|
||||
/**
|
||||
* @brief 计算当前尺寸
|
||||
* @param outline
|
||||
* @return
|
||||
*/
|
||||
virtual QSizeF sizeHint(const QRectF &outline) const = 0;
|
||||
virtual QSizeF minSizeHint() const = 0;
|
||||
virtual QSizeF maxSizeHint() const = 0;
|
||||
virtual std::pair<float, float> sizeStretchHint() const = 0;
|
||||
|
||||
/**
|
||||
* @brief 子元素数据,安装元素书序
|
||||
|
@ -160,6 +151,12 @@ namespace PresentDatas {
|
|||
*/
|
||||
virtual void resetContentLayout(MemberOri oritation, MemberType child_type);
|
||||
|
||||
/**
|
||||
* @brief 设置显示标志
|
||||
* @param state
|
||||
*/
|
||||
virtual void setVisible(bool state);
|
||||
|
||||
/**
|
||||
* @brief 设置相对布局元素
|
||||
* @param type
|
||||
|
@ -187,43 +184,56 @@ namespace PresentDatas {
|
|||
*/
|
||||
virtual void removeChild(EntityData *inst);
|
||||
|
||||
virtual void setMinSizeHint(const QSizeF &hint);
|
||||
virtual void setMaxSizeHint(const QSizeF &hint);
|
||||
virtual void setStretchHint(const std::pair<float, float> &hint);
|
||||
|
||||
virtual void setStyledText(const QString &content) = 0;
|
||||
virtual void setPlainText(const QString &content) = 0;
|
||||
|
||||
// EntityData ====================================================
|
||||
virtual QString uID() const;
|
||||
virtual EntityType type() const;
|
||||
virtual MemberOri oritation() const;
|
||||
virtual MemberType displayType() const;
|
||||
virtual std::pair<AnchorTarget, EntityData *> anchorTarget() const;
|
||||
virtual std::tuple<AnchorPos, EntityData::offset_h, EntityData::offset_v> anchorPos() const;
|
||||
virtual QList<EntityData *> children() const;
|
||||
virtual QString uID() const override;
|
||||
virtual EntityType type() const override;
|
||||
virtual MemberOri oritation() const override;
|
||||
virtual MemberType displayType() const override;
|
||||
virtual std::pair<AnchorTarget, EntityData *> anchorTarget() const override;
|
||||
virtual std::tuple<AnchorPos, EntityData::offset_h, EntityData::offset_v> anchorPos() const override;
|
||||
virtual QList<EntityData *> children() const override;
|
||||
virtual bool isVisible() const override;
|
||||
virtual QSizeF minSizeHint() const override;
|
||||
virtual QSizeF maxSizeHint() const override;
|
||||
virtual std::pair<float, float> sizeStretchHint() const override;
|
||||
|
||||
private:
|
||||
bool visible_bool;
|
||||
EntityType type_store;
|
||||
QString document_id;
|
||||
MemberOri oritation_store;
|
||||
MemberType layout_type;
|
||||
std::tuple<AnchorTarget, EntityData *, AnchorPos, EntityData::offset_h, EntityData::offset_v> anchor_info;
|
||||
QList<EntityData *> children_store;
|
||||
QSizeF size_min, size_max;
|
||||
std::pair<float, float> stretch_pair;
|
||||
|
||||
protected:
|
||||
float appoint_layout_minvalue() const;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 文档数据模型
|
||||
*/
|
||||
class DocumentData : public SpecificEntityData {
|
||||
class Document : public SpecificEntityData {
|
||||
public:
|
||||
DocumentData(const QString &name);
|
||||
Document(const QString &name);
|
||||
|
||||
// EntityData interface
|
||||
public:
|
||||
virtual QString styledText() const override;
|
||||
virtual QString plainText() const override;
|
||||
virtual bool isVisible() const override;
|
||||
virtual QSizeF minSizeHint(const QRectF &outline) const override;
|
||||
virtual QSizeF sizeHint(const QRectF &outline) const override;
|
||||
|
||||
// SpecificEntityData interface
|
||||
public:
|
||||
virtual void resetContentLayout(MemberOri oritation, MemberType) override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
} // namespace PresentDatas
|
||||
|
|
|
@ -10,10 +10,12 @@ CONFIG += c++11
|
|||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
blockdatas.cpp \
|
||||
entitydata.cpp \
|
||||
libtextedit.cpp
|
||||
|
||||
HEADERS += \
|
||||
blockdatas.h \
|
||||
entitydata.h \
|
||||
libTextEdit_global.h \
|
||||
libtextedit.h
|
||||
|
|
108
u_test/main.cpp
108
u_test/main.cpp
|
@ -7,6 +7,7 @@
|
|||
#include <QMainWindow>
|
||||
#include <QMenuBar>
|
||||
#include <QPushButton>
|
||||
#include <QStackedWidget>
|
||||
#include <QStyle>
|
||||
#include <QToolBar>
|
||||
#include <baseview.h>
|
||||
|
@ -23,61 +24,72 @@ int main(int argc, char *argv[]) {
|
|||
// 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);
|
||||
// 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();
|
||||
|
||||
QWidget *firstPageWidget = new XWidget(nullptr, Qt::GlobalColor::green);
|
||||
QWidget *secondPageWidget = new XWidget(nullptr, Qt::black);
|
||||
QWidget *thirdPageWidget = new XWidget(nullptr, Qt::black);
|
||||
|
||||
QStackedWidget *stackedWidget = new QStackedWidget;
|
||||
stackedWidget->addWidget(firstPageWidget);
|
||||
stackedWidget->addWidget(secondPageWidget);
|
||||
stackedWidget->addWidget(thirdPageWidget);
|
||||
|
||||
win->setCentralWidget(stackedWidget);
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue