Qt自定义弹出式菜单(Qt自定义弹窗)
需求:写一个自定义弹出菜单,
1、单击按钮时展现,单击空白处或再次单击按钮则隐藏
2、菜单内容可以是自定义的widget
3、可以自定义弹出菜单的方向
(可以参考用来实现至任意组件的下拉框)
解决思路:
由于要自定义弹出菜单的方向,而QToolButton的showMenu无法自定义弹出方向,所以一开始想到的方案是
1、QToolButton+独立的QMenu,QToolButton收到单击事件时调用QWidget的show;这样做会发现一个问题,尽管单击空白处可以隐藏弹窗,但是再次单击按钮的时候这个弹窗会又一次弹起(弹窗的隐藏总会先于单击事件的处理),无法满足要求1。
2、QToolButton+自定义QWidget的方案,单击空白隐藏不好控,且容易出现方案1的问题。
解决方案:
要求1可以通过QToolButton的showMenu满足(QToolButton+自定义QWidget的方案行不通);
要求2可以通过QWidgetAction满足;
要求3可以通过通过子类化QMenu,在showEvent中移到相应的位置满足;
github:Demo_QMenu
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步