You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:13:10