#include "DialogTaskPou.h" #include "PouManager.h" // 根节点的名称 #define ROOT_NAME "ALL_POUS" DialogTaskPou::DialogTaskPou(QWidget *parent) : QDialog(parent) { ui.setupUi(this); // 对话框界面初始化 init(); // 添加所有的Pou到树形结构中 this->AddPousToTree(); } DialogTaskPou::~DialogTaskPou() { } /// /// 对话框初始化 /// void DialogTaskPou::init() { // 设置对话框标题 this->setWindowTitle(("POU Selection ( Multi Selection )")); this->setAttribute(Qt::WA_QuitOnClose); this->setWindowModality(Qt::ApplicationModal); // Tree // 1列 ui.treePou->setColumnCount(1); // 隐藏表头 ui.treePou->setHeaderHidden(true); // 显示虚线 ui.treePou->setStyle(QStyleFactory::create("windows")); // 多选 ui.treePou->setSelectionMode(QAbstractItemView::MultiSelection); // 槽函数 connect(ui.selectButton, SIGNAL(clicked()), this, SLOT(onButtonSelectClicked())); connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject())); // 设置固定窗体大小 this->setFixedSize(463, 460); //this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint); } /// /// 添加所有的Pou到树形结构中 /// void DialogTaskPou::AddPousToTree() { // 首先添加一个父节点 QTreeWidgetItem* rootItem = new QTreeWidgetItem(QStringList(ROOT_NAME)); rootItem->setIcon(0, QIcon(":/image/tool_tree_item.png")); // 使父节点不可选中 rootItem->setFlags(Qt::ItemIsEnabled); ui.treePou->addTopLevelItem(rootItem); // 循环添加所有的Pou // 从公共区域获取全部变量 const QMap& allPous = g_pPouManager->getAllPous(); // 遍历所有的Pou信息 QMapIterator it(allPous); while (it.hasNext()) { // 以Pou分组名称为节点添加 QString strPouGroupName = it.next().key(); // 需要跳过Hardware以及功能块类型的Pou if (strPouGroupName == GROUP_NAME_HARDWARE) { continue; } POU* pPou = it.value(); // 加上工具数量 int nToolCount = pPou->GetStandardToolsCount(); strPouGroupName += " (" + QString::number(nToolCount) + " tools)"; QTreeWidgetItem* pouItem = new QTreeWidgetItem(rootItem, QStringList(strPouGroupName)); pouItem->setIcon(0, QIcon(":/image/tree_item.png")); rootItem->addChild(pouItem); // 将新加入的item和对应的Interface绑定 m_ItemPous.insert(pouItem, it.value()); } // 展开树状节点 ui.treePou->expandAll(); } /// /// select按钮 /// void DialogTaskPou::onButtonSelectClicked() { // 清空当前选择 m_selPous.clear(); // 获取选择项(多选) QList selectedItemList = ui.treePou->selectedItems(); // 如果选择的数量为0,则提示重新选择 if (selectedItemList.size() <= 0) { Utility::VPCriticalMessageBox("Please select a valid pou."); return; } // 找到对应的数据结构项 for (QTreeWidgetItem * pSelItem : selectedItemList) { if (m_ItemPous.contains(pSelItem)) { m_selPous.push_back(m_ItemPous[pSelItem]); } } this->accept(); }