WindowApp.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #include "WindowApp.h"
  2. #include "WindowAppResourceManagerTree.h"
  3. #include "WindowAppTreeTool.h"
  4. #include "WindowAppUiTool.h"
  5. #include "WindowAppMdiFrame.h"
  6. WindowApp::WindowApp(QWidget* parent)
  7. : QMainWindow(parent)
  8. {
  9. ui.setupUi(this);
  10. m_pToolSearchBar = nullptr;
  11. // 创建界面布局
  12. createLayouts();
  13. // 创建默认的几个视图
  14. m_pResourceManagerTree->initDefaultViews();
  15. // 创建默认的几个节点
  16. m_pResourceManagerTree->initDefaultNodes();
  17. }
  18. WindowApp::~WindowApp()
  19. {
  20. }
  21. /// <summary>
  22. /// 2022-9-20,根据用户切换的界面,自动激活对应的工具箱Tab
  23. /// 激活Pou窗体时,激活视觉工具箱,激活UI窗体时,激活UI工具箱
  24. /// </summary>
  25. /// <param name="nTabIndex"></param>
  26. void WindowApp::activeToolBoxView(int nTabIndex, WindowAppTreeTool::TREETOOL_MODE mode)
  27. {
  28. if (nTabIndex == APPTOOLBOX_VIEW_NULL)
  29. {
  30. m_pDockToolManager->hide();
  31. return;
  32. }
  33. m_pDockToolManager->show();
  34. m_pAllToolBox->setCurrentIndex(nTabIndex);
  35. m_pVisionSubTools->initTreeTools(mode);
  36. }
  37. /// <summary>
  38. /// 创建界面布局
  39. /// </summary>
  40. void WindowApp::createLayouts()
  41. {
  42. // 创建左上侧的资源管理器
  43. this->createResourceManager();
  44. // 创建界面中的Mdi容器框架
  45. this->createMdiFrame();
  46. // 创建左下角的工具管理器(工具栏)
  47. this->createToolManager();
  48. // 设置界面布局
  49. this->initLayouts();
  50. }
  51. /// <summary>
  52. /// 创建左上侧的资源管理器
  53. /// </summary>
  54. void WindowApp::createResourceManager()
  55. {
  56. // 资源管理器总窗口框架
  57. m_pDockResourceManager = new QDockWidget(("资源管理器"), this);
  58. m_pDockResourceManager->setFeatures(QDockWidget::NoDockWidgetFeatures);
  59. // 只允许左右停靠
  60. m_pDockResourceManager->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  61. // 添加内部的树状结构
  62. m_pResourceManagerTree = new WindowAppResourceManagerTree();
  63. m_pDockResourceManager->setWidget(m_pResourceManagerTree);
  64. this->addDockWidget(Qt::LeftDockWidgetArea, m_pDockResourceManager);
  65. m_pDockResourceManager->setMinimumWidth(APP_RM_WIDTH);
  66. m_pDockResourceManager->setMaximumWidth(APP_RM_WIDTH);
  67. // 2022-9-20,绑定WindowApp指针,用于切换对应的Toolbox Tab
  68. m_pResourceManagerTree->bindWindowApp(this);
  69. }
  70. /// <summary>
  71. /// 创建界面中的Mdi容器框架
  72. /// </summary>
  73. void WindowApp::createMdiFrame()
  74. {
  75. // 窗口容器
  76. m_pMdiFrame = new WindowAppMdiFrame();
  77. m_pMdiFrame->setBackground(QBrush(Qt::NoBrush));
  78. QString strPath = QCoreApplication::applicationDirPath() + "/Desktop.bmp";
  79. QFileInfo info(strPath);
  80. if (info.exists() != true)
  81. {
  82. m_pMdiFrame->setStyleSheet("QMdiArea{ border-image: url(:/image/background.png); }");
  83. }
  84. else
  85. {
  86. m_pMdiFrame->setStyleSheet("QMdiArea{ border-image: url(" + strPath + "); }");
  87. }
  88. // 绑定Mdi管理单元
  89. m_pResourceManagerTree->setMdiFrame(m_pMdiFrame);
  90. }
  91. /// <summary>
  92. /// 创建左下角的工具管理器(工具栏)
  93. /// </summary>
  94. void WindowApp::createToolManager()
  95. {
  96. // ToolManager总窗口框架
  97. m_pDockToolManager = new QDockWidget(("工具管理器"), this);
  98. m_pDockToolManager->setFeatures(QDockWidget::NoDockWidgetFeatures);
  99. // 只允许左右停靠
  100. m_pDockToolManager->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
  101. // 添加Toolbox到主界面
  102. this->addDockWidget(Qt::RightDockWidgetArea, m_pDockToolManager);
  103. m_pDockToolManager->setMinimumWidth(APP_RM_WIDTH);
  104. m_pDockToolManager->setMaximumWidth(APP_RM_WIDTH);
  105. // Toolbox的窗口
  106. m_pAllToolBox = new QStackedWidget();
  107. m_pToolSearchBar = new QLineEdit();
  108. m_pToolSearchBar->setPlaceholderText("搜索工具");
  109. connect(m_pToolSearchBar, &QLineEdit::textChanged, this, &WindowApp::showToolsItem);
  110. QWidget* widget = new QWidget();
  111. QGridLayout* gridLayout = new QGridLayout(widget);
  112. // 添加视觉工具的子窗体
  113. m_pVisionSubTools = new WindowAppTreeTool(WindowAppTreeTool::TREETOOL_MODE::MODE_POU);
  114. gridLayout->addWidget(m_pToolSearchBar, 0, 0, 1, 1);
  115. gridLayout->addWidget(m_pVisionSubTools, 1, 0, 1, 1);
  116. m_pAllToolBox->addWidget(widget);
  117. // 添加UI的子窗口
  118. m_pUiSubTools = new WindowAppUiTool();
  119. m_pAllToolBox->addWidget(m_pUiSubTools);
  120. // 将窗口添加进Toolbox
  121. m_pDockToolManager->setWidget(m_pAllToolBox);
  122. // 默认不显示
  123. m_pDockToolManager->hide();
  124. }
  125. /// <summary>
  126. /// 设置界面布局
  127. /// </summary>
  128. void WindowApp::initLayouts()
  129. {
  130. // 设置Grid Layout
  131. QGridLayout* gridLayout = new QGridLayout(ui.widget);
  132. gridLayout->setContentsMargins(2, 2, 2, 2); // 设置窗口的间隙 左上右下
  133. gridLayout->setSpacing(4);
  134. QWidget* widget = new QWidget(ui.widget);
  135. QGridLayout* gridLayout_2 = new QGridLayout(widget);
  136. gridLayout_2->setContentsMargins(2, 2, 2, 2); // 设置窗口的间隙 左上右下
  137. gridLayout_2->setSpacing(4);
  138. gridLayout_2->addWidget(m_pDockResourceManager, 0, 0, 1, 1);
  139. gridLayout_2->addWidget(m_pMdiFrame, 0, 1, 2, 1);
  140. gridLayout_2->addWidget(m_pDockToolManager, 1, 0, 1, 1);
  141. gridLayout->addWidget(widget, 0, 0, 1, 1);
  142. }
  143. //void WindowApp::resizeEvent(QResizeEvent* event)
  144. //{
  145. //}
  146. /// <summary>
  147. /// 搜索栏的搜索事件
  148. /// </summary>
  149. void WindowApp::showToolsItem()
  150. {
  151. if (m_pToolSearchBar != nullptr)
  152. {
  153. onFindToolsItem(m_pToolSearchBar->text());
  154. }
  155. }
  156. /// <summary>
  157. /// 从工具箱里搜索出目标工具
  158. /// </summary>
  159. /// <param name="qsFilter"></param>
  160. void WindowApp::onFindToolsItem(const QString& qsFilter)
  161. {
  162. if (m_pVisionSubTools == nullptr)
  163. {
  164. return;
  165. }
  166. // 如果搜索栏为空,则不执行后续的检索
  167. if (qsFilter.isEmpty())
  168. {
  169. activeToolBoxView(APPTOOLBOX_VIEW_VISION);
  170. return;
  171. }
  172. QTreeWidgetItemIterator it(m_pVisionSubTools);
  173. while (*it)
  174. {
  175. // 忽略大小写的方式,比较字符串
  176. if ((*it)->text(0).contains(qsFilter, Qt::CaseInsensitive))
  177. {
  178. (*it)->setHidden(false);
  179. QTreeWidgetItem* item = *it;
  180. //显示父节点
  181. while (item->parent())
  182. {
  183. item->parent()->setHidden(false);
  184. item = item->parent();
  185. }
  186. item->setExpanded(true);
  187. }
  188. else
  189. {
  190. //不满足满足条件先隐藏,它的子项目满足条件时会再次让它显示
  191. (*it)->setHidden(true);
  192. }
  193. ++it;
  194. }
  195. }