Mac平台Qt6.7.3及以上版本QAction的setIcon失效问题
问题:Mac平台Qt6.7.3+版本菜单Action图标无法显示,Windows正常
这段代码在Windows平台Qt6.9.2及以下版本均可正常运行,但在Mac平台从Qt6.7.3版本开始失效(Qt6.7.2为最后一个正常工作的版本):右键弹出菜单中,"Hallo Bart"文本旁的图片bart.png(需放在同一目录)无法显示;菜单栏中的QAction图标也存在同样问题。
代码示例:
#include <QtGui> #include <QApplication> #include <QMenu> #include <QLineEdit> #include <QDebug> #include <QDir> class WLineEdit : public QLineEdit { public: WLineEdit(QWidget *parent) : QLineEdit(parent) { } void contextMenuEvent( QContextMenuEvent * e ) { QPointer<QMenu> pop = new QMenu( this ); QPixmap pix=QPixmap("bart.png"); QAction* ac = pop->addAction( "Hallo Bart"); ac->setIcon(pix); pop->exec(e->globalPos()); } }; int main(int argc, char**argv) { QApplication app(argc, argv); qDebug() << "current path:" << QDir::currentPath(); WLineEdit le(0); le.show(); return app.exec(); }
问题分析
排除配置遗漏的可能
- 代码通过相对路径加载图片,
QDir::currentPath()可确认当前目录正确,且Windows平台正常运行,说明路径逻辑和图片格式无问题。 - 未依赖特殊Qt资源配置,不存在配置遗漏导致的加载失败。
属于Qt已知平台适配Bug
这个现象是Qt在Mac平台从6.7.3版本开始的菜单图标渲染逻辑变更导致的框架问题:Qt 6.7.3对Mac平台的NSMenu相关实现做了调整,直接通过QPixmap设置的Action图标无法正确渲染到菜单组件中。
临时解决方案
- 使用Qt资源文件(qrc)打包图片,通过资源路径(如
:bart.png)加载,可绕过该渲染问题。 - 降级至Qt6.7.2版本,保持原有代码逻辑正常运行。
- 手动通过
QIcon::addPixmap方法添加多尺寸图片,适配Mac平台菜单图标的显示要求。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

