Вот такой код падает, если вызвать то самое acAddNote (который, в свою очередь, вызывает модальный диалог).
QSharedPointer<QMenu> menu { tableDelegate.editor()->createStandardContextMenu() };
menu->addSeparator();
acAddNote->setText(STR_ADDNOTE);
menu->addAction(acAddNote);
menu->exec(tableDelegate.editor()->mapToGlobal(point));
Код вызывается из слота, привязанного к QLineEdit::customContextMenuRequested. А QLineEdit — редактор в таблице; вот такая у нас утка в зайце. Разумеется, где-то посреди exec’а редактор исчезает, возможно, унося с собой часть объектов.
Если вместо QSharedPointer поставить простой указатель QMenu*, полный порядок, но не «течёт» ли память?
Документация говорит, что «The popup menu's ownership is transferred to the caller». Ко мне вечно обращаются с толкованием правил настольных игр, но я этого не могу растолковать — по-моему, кто вызвал, тот и уничтожает.
Что делать? Кто владеет этим меню и как его уничтожать?