#include "WindowApp.h"
#include "WindowAppResourceManagerTree.h"
#include "WindowAppTreeTool.h"
#include "WindowAppUiTool.h"
#include "WindowAppMdiFrame.h"
WindowApp::WindowApp(QWidget* parent)
: QMainWindow(parent)
{
ui.setupUi(this);
m_pToolSearchBar = nullptr;
// 创建界面布局
createLayouts();
// 创建默认的几个视图
m_pResourceManagerTree->initDefaultViews();
// 创建默认的几个节点
m_pResourceManagerTree->initDefaultNodes();
}
WindowApp::~WindowApp()
{
}
///
/// 2022-9-20,根据用户切换的界面,自动激活对应的工具箱Tab
/// 激活Pou窗体时,激活视觉工具箱,激活UI窗体时,激活UI工具箱
///
///
void WindowApp::activeToolBoxView(int nTabIndex, WindowAppTreeTool::TREETOOL_MODE mode)
{
if (nTabIndex == APPTOOLBOX_VIEW_NULL)
{
m_pDockToolManager->hide();
return;
}
m_pDockToolManager->show();
m_pAllToolBox->setCurrentIndex(nTabIndex);
m_pVisionSubTools->initTreeTools(mode);
}
///
/// 创建界面布局
///
void WindowApp::createLayouts()
{
// 创建左上侧的资源管理器
this->createResourceManager();
// 创建界面中的Mdi容器框架
this->createMdiFrame();
// 创建左下角的工具管理器(工具栏)
this->createToolManager();
// 设置界面布局
this->initLayouts();
}
///
/// 创建左上侧的资源管理器
///
void WindowApp::createResourceManager()
{
// 资源管理器总窗口框架
m_pDockResourceManager = new QDockWidget(("资源管理器"), this);
m_pDockResourceManager->setFeatures(QDockWidget::NoDockWidgetFeatures);
// 只允许左右停靠
m_pDockResourceManager->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
// 添加内部的树状结构
m_pResourceManagerTree = new WindowAppResourceManagerTree();
m_pDockResourceManager->setWidget(m_pResourceManagerTree);
this->addDockWidget(Qt::LeftDockWidgetArea, m_pDockResourceManager);
m_pDockResourceManager->setMinimumWidth(APP_RM_WIDTH);
m_pDockResourceManager->setMaximumWidth(APP_RM_WIDTH);
// 2022-9-20,绑定WindowApp指针,用于切换对应的Toolbox Tab
m_pResourceManagerTree->bindWindowApp(this);
}
///
/// 创建界面中的Mdi容器框架
///
void WindowApp::createMdiFrame()
{
// 窗口容器
m_pMdiFrame = new WindowAppMdiFrame();
m_pMdiFrame->setBackground(QBrush(Qt::NoBrush));
QString strPath = QCoreApplication::applicationDirPath() + "/Desktop.bmp";
QFileInfo info(strPath);
if (info.exists() != true)
{
m_pMdiFrame->setStyleSheet("QMdiArea{ border-image: url(:/image/background.png); }");
}
else
{
m_pMdiFrame->setStyleSheet("QMdiArea{ border-image: url(" + strPath + "); }");
}
// 绑定Mdi管理单元
m_pResourceManagerTree->setMdiFrame(m_pMdiFrame);
}
///
/// 创建左下角的工具管理器(工具栏)
///
void WindowApp::createToolManager()
{
// ToolManager总窗口框架
m_pDockToolManager = new QDockWidget(("工具管理器"), this);
m_pDockToolManager->setFeatures(QDockWidget::NoDockWidgetFeatures);
// 只允许左右停靠
m_pDockToolManager->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
// 添加Toolbox到主界面
this->addDockWidget(Qt::RightDockWidgetArea, m_pDockToolManager);
m_pDockToolManager->setMinimumWidth(APP_RM_WIDTH);
m_pDockToolManager->setMaximumWidth(APP_RM_WIDTH);
// Toolbox的窗口
m_pAllToolBox = new QStackedWidget();
m_pToolSearchBar = new QLineEdit();
m_pToolSearchBar->setPlaceholderText("搜索工具");
connect(m_pToolSearchBar, &QLineEdit::textChanged, this, &WindowApp::showToolsItem);
QWidget* widget = new QWidget();
QGridLayout* gridLayout = new QGridLayout(widget);
// 添加视觉工具的子窗体
m_pVisionSubTools = new WindowAppTreeTool(WindowAppTreeTool::TREETOOL_MODE::MODE_POU);
gridLayout->addWidget(m_pToolSearchBar, 0, 0, 1, 1);
gridLayout->addWidget(m_pVisionSubTools, 1, 0, 1, 1);
m_pAllToolBox->addWidget(widget);
// 添加UI的子窗口
m_pUiSubTools = new WindowAppUiTool();
m_pAllToolBox->addWidget(m_pUiSubTools);
// 将窗口添加进Toolbox
m_pDockToolManager->setWidget(m_pAllToolBox);
// 默认不显示
m_pDockToolManager->hide();
}
///
/// 设置界面布局
///
void WindowApp::initLayouts()
{
// 设置Grid Layout
QGridLayout* gridLayout = new QGridLayout(ui.widget);
gridLayout->setContentsMargins(2, 2, 2, 2); // 设置窗口的间隙 左上右下
gridLayout->setSpacing(4);
QWidget* widget = new QWidget(ui.widget);
QGridLayout* gridLayout_2 = new QGridLayout(widget);
gridLayout_2->setContentsMargins(2, 2, 2, 2); // 设置窗口的间隙 左上右下
gridLayout_2->setSpacing(4);
gridLayout_2->addWidget(m_pDockResourceManager, 0, 0, 1, 1);
gridLayout_2->addWidget(m_pMdiFrame, 0, 1, 2, 1);
gridLayout_2->addWidget(m_pDockToolManager, 1, 0, 1, 1);
gridLayout->addWidget(widget, 0, 0, 1, 1);
}
//void WindowApp::resizeEvent(QResizeEvent* event)
//{
//}
///
/// 搜索栏的搜索事件
///
void WindowApp::showToolsItem()
{
if (m_pToolSearchBar != nullptr)
{
onFindToolsItem(m_pToolSearchBar->text());
}
}
///
/// 从工具箱里搜索出目标工具
///
///
void WindowApp::onFindToolsItem(const QString& qsFilter)
{
if (m_pVisionSubTools == nullptr)
{
return;
}
// 如果搜索栏为空,则不执行后续的检索
if (qsFilter.isEmpty())
{
activeToolBoxView(APPTOOLBOX_VIEW_VISION);
return;
}
QTreeWidgetItemIterator it(m_pVisionSubTools);
while (*it)
{
// 忽略大小写的方式,比较字符串
if ((*it)->text(0).contains(qsFilter, Qt::CaseInsensitive))
{
(*it)->setHidden(false);
QTreeWidgetItem* item = *it;
//显示父节点
while (item->parent())
{
item->parent()->setHidden(false);
item = item->parent();
}
item->setExpanded(true);
}
else
{
//不满足满足条件先隐藏,它的子项目满足条件时会再次让它显示
(*it)->setHidden(true);
}
++it;
}
}