Есть дерево, QTreeView,по клику на элементе вызывается меню. Проблема в том что элементов несколько десятков и меню для каждого разное. в меню может быть и подменю.
Поэтому меню всякий раз создается заново
Что то в этом роде:
//тут создается меню
treeMenu = new QMenu(ui->objectTree);
connect(ui->objectTree,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(treePopupShow(const QPoint&)));
// клик на элементе
void MyProgram::treePopupShow(const QPoint & point) {
QModelIndex index = ui->objectTree->indexAt(point);
if(index.isValid())
{
TreeItem * item = static_cast<TreeItem *>(index.internalPointer());
if(item)
{
treeMenu->clear();
switch(item->getType())
{
case NodeType1:
QMenu * submenu1 = treeMenu->addMenu(tr("submenu1")); // тут создается подменю
foreach(QString action,actionList1)
{
QAction * action = submenu1->addAction(action);
action->setData(action);
}
break;
case NodeType2:
QMenu * submenu2 = treeMenu->addMenu(tr("submenu2")); // тут создается подменю
foreach(QString action,actionList2)
{
QAction * action = submenu2->addAction(action);
action->setData(action);
}
break;
}
treeMenu->exec(ui->objectTree->viewport()->mapToGlobal(point));
}
}
если делать treeMenu->clear(); перед созданием меню то это лишь очистит все actions, подменю не удалятся. Это потенциальная утечка памяти.
Как поступить, не знаю