123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #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()
- {
- }
- /// <summary>
- /// 2022-9-20,根据用户切换的界面,自动激活对应的工具箱Tab
- /// 激活Pou窗体时,激活视觉工具箱,激活UI窗体时,激活UI工具箱
- /// </summary>
- /// <param name="nTabIndex"></param>
- 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);
- }
- /// <summary>
- /// 创建界面布局
- /// </summary>
- void WindowApp::createLayouts()
- {
- // 创建左上侧的资源管理器
- this->createResourceManager();
- // 创建界面中的Mdi容器框架
- this->createMdiFrame();
- // 创建左下角的工具管理器(工具栏)
- this->createToolManager();
- // 设置界面布局
- this->initLayouts();
- }
- /// <summary>
- /// 创建左上侧的资源管理器
- /// </summary>
- 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);
- }
- /// <summary>
- /// 创建界面中的Mdi容器框架
- /// </summary>
- 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);
- }
- /// <summary>
- /// 创建左下角的工具管理器(工具栏)
- /// </summary>
- 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();
- }
- /// <summary>
- /// 设置界面布局
- /// </summary>
- 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)
- //{
- //}
- /// <summary>
- /// 搜索栏的搜索事件
- /// </summary>
- void WindowApp::showToolsItem()
- {
- if (m_pToolSearchBar != nullptr)
- {
- onFindToolsItem(m_pToolSearchBar->text());
- }
- }
- /// <summary>
- /// 从工具箱里搜索出目标工具
- /// </summary>
- /// <param name="qsFilter"></param>
- 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;
- }
- }
|