사용자 정의 컨텍스트 메뉴를 표 위에 표시 할 수 있습니다. 이 메뉴는 대상 위젯을 허용하고 조정하는 일반적인 기능을 사용하여 생성되는 방법입니다QMenu 컨텍스트 메뉴를 적절히 삭제하는시기와 방법은 무엇입니까?
#include <QMenu>
void MainWindow::makeContextMenu(const QPoint& pos, QWidget* target)
{
QMenu *menu = new QMenu(this);
menu->addAction(new QAction("Action 1", menu));
menu->addAction(new QAction("Action 2", menu));
menu->addAction(new QAction("Action 3", menu));
// Notify window about clicking
QObject::connect(menu, &QMenu::triggered, this, &MainWindow::menuClicked);
// If this is a scroll area, map coordinates to real app coordinates
if(QAbstractScrollArea* area = dynamic_cast<QAbstractScrollArea*>(target))
menu->popup(area->viewport()->mapToGlobal(pos));
else
menu->popup(pos);
}
문제는 QMenu* menu
파괴하지 않고 메모리에서 제거됩니다 않을 것입니다. 숨겨진 후에도 MainWindow
의 자식으로 지속됩니다.
어떻게해야합니까? 나 자신을 지울 수있는 메뉴를 설정할 수 있습니까? 또는 메뉴의 동일한 인스턴스를 다시 사용해야합니까 아니면 같은 포인터에 저장할 수 있습니까?
귀하의 제안을 발견해도 문제가 해결되지 않았습니다. 이것은 사용자가 메뉴의 특정 항목을 클릭 할 필요가 없기 때문입니다 ... –
@ TomášZato, 그래서, 당신은'& QMenu :: triggered'가 항상 발생하지 않는다고 말하고 있습니까? .... 그 경우 두 번째 및 세 번째 옵션은 무엇입니까? – WhiZTiM
마지막 변수 옵션으로 만 일부 변수에 메뉴를 유지하는 것을 고려했습니다. 특히 그 메뉴는 항상 한 번만 표시됩니다. QMessageBox와 같이 사라지면 삭제 된 것이 더 좋을 것입니다. –