AppImage/Qt6 - QIcon::setFallbackSearchPaths 不起作用

问题描述 投票:0回答:1

我正在尝试部署一个 Qt6 应用程序,它捆绑了自己的图标(这样在 Windows/OSX 上我可以获得一致的图标)。作为构建的一部分,我将微风图标的内容部署到 $BIN/share/icons 中(我有一个 CMake 函数可以为我完成此操作)。

理论上,我应该这样做:

    QStringList paths;
    paths << QIcon::fallbackSearchPaths()
          << QDir(QCoreApplication::applicationDirPath() + "/../share/icons").absolutePath();
    qDebug() << "Icons search path" << paths;
    QIcon::setFallbackSearchPaths(paths);
    QIcon::setThemeName("Breeze");

然后在我的代码中:

newFilePopup->setIcon(QIcon::fromTheme("document-new"));

这对我不起作用。由于某些原因,图标未加载。

我的构建结构看起来不错(在

../share/icons/
中我有一个带有图标索引的子目录,并且在我的代码中我正确地使用了它)。

$ ~/src/program/build/ ls -l bin/program  share/icons/breeze/*.theme
-rwxrwxr-x 1 user user 12783136 Jul 25 18:42 bin/program
-rw-rw-r-- 1 user user    19288 Jul  5 13:52 share/icons/breeze/index.theme

我没有找到有关此设置的文档,而且我不知道如何调试它。在内部代码使用内部的

QThemeIconEngine(name))
。尝试查看代码 - qt/qtbase/src/gui/image/qiconloader.cpp - 但发现没有明显的调试方法。

编辑: 我想知道这是否与 AppImage 和平台集成有关。

当我“正常”运行应用程序时,我可以看到图标(即使我删除了系统图标)。但是,当我将其打包为 AppImage 时 - 我看不到图标。

我已根据需要修改了标题。

c++ qt appimage
1个回答
0
投票

面临的问题是,在创建AppImage期间,图标插件没有打包。

我将这些行添加到我的构建脚本中:

mkdir -p "dist/${matrix_config_build_dir}/usr/plugins/iconengines/" mkdir -p "dist/${matrix_config_build_dir}/usr/plugins/platforms/" cp -arv $QTDIR/plugins/iconengines/* "dist/${matrix_config_build_dir}/usr/plugins/iconengines/" cp -arv $QTDIR/plugins/platforms/libqwayland-*.so "dist/${matrix_config_build_dir}/usr/plugins/platforms/"
我是怎么发现这一点的?我跑

./program.AppImage --appimage-mount

。这将显示我的 AppImage 的安装点。然后我
cd
进入它,并从顶部运行
./AppRun
我的应用程序现在运行,我仍然看到问题(我可以重现)。然后我运行 
strace -o 1.txt ./AppRun
 并评估打开的文件。我看到该程序尝试打开 iconengines 目录 - 该目录在 squashfs 上不可用。这意味着 Qt AppImage 插件没有复制它。

那不好玩。

© www.soinside.com 2019 - 2024. All rights reserved.