#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; } }