PyQt6 QAction menu/setMenu?

Phil Thompson phil at riverbankcomputing.com
Tue Jul 19 15:21:25 BST 2022


On 18/07/2022 11:31, ekhumoro wrote:
> On 18/07/2022 07:19, Maurizio Berti wrote:
>> I believe I can understand the reason for this: having a custom 
>> QWidgetAction that *also* acts as an item for a submenu.
>> I realize this is quite a "fringe" case, but it also seems reasonable.
> 
> That is one genuine use-case. But the more general problem is: how to
> set a menu on a *subclass* of QAction? AFAICS,
> this is currently impossible without QAction.setMenu(), since none of
> the other APIs will preserve the type. For example:
> 
>     submenu = QMenu()
>     action = QMenu.addMenu(submenu)
> 
> just returns a plain QAction via QMenu.menuAction(), which is
> read-only. ISTM that Qt has deprecated an API without
> first providing an alternative code path. The Qt docs strongly advise
> against using setMenu() in new code, but for some
> genuine use-cases there really is no alternative. Or at least, I can't
> see one - please someone correct me if I am wrong!
> 
> It was suggested in Qt code review that something like
> QMenu.setMenuInAction() might be added at some point - which
> *would* solve the problem. But what are users supposed to do in the
> meantime? For anyone porting from [Py]Qt5 who has an
> extensive menu system based on subclasses of QAction, this issue seems
> to be a significant blocker.

I decided it would be quicker to implement menu() and setMenu() than to 
work out whether they were really needed.

Phil


More information about the PyQt mailing list