Qt/C++:在Windows操作系统下运行程序时,图标未显示出来。

3
我正在使用QT 4.7.0。我在Windows上创建了一个项目。我在按钮上使用了一些图标,但是当我将.exe文件移动到另一台Windows机器上时,图标不显示。如果我在开发机器上运行程序,图标就会出现。
我创建了一个qrc文件并将图标添加到其中。

这个回答解决了您的问题吗?在另一台计算机上,图标消失 - acraig5075
5个回答

7
可能您遇到了插件问题。QT带有许多插件,您的应用程序在新目标上找不到它们。
请查看此链接:this this。将插件复制到新目标并使用qt.conf方法指示插件路径。

你能在这里发布一个例子吗? - user597987

3
您的代码需要引用资源包中的图标,而不是硬盘路径中的图标,例如:
QIcon icon(":/resources/icon.ico");

而不是

QIcon icon("resources/icon.ico");

通过使用depends.exe在目标机器上对调试版本进行分析,可以帮助你确定是OrcunC还是我的猜测正确。


我尝试使用QIcon icon(":/resources/icon.ico");,但没有任何变化发生。 - user597987
这是正确的方法。如果它失败了,那么尝试在调试器中步入QIcon构造函数(使用Qt库的调试版本)。 - the_mandrill
你使用简单的图标文件还是像 SVG/JPEG 这样更复杂的东西?你编译了 qrc 吗?你是否编译/链接了 qrc 编译的输出? - Jens
我知道这是正确的方法,我在多个项目中都使用了这种方法,但现在的问题是当我将我的.exe文件移动到另一台Windows机器时,图标不会出现。 - user597987

1

我认为你需要在运行时链接图像插件dll。

从Qt目录中将必要的dll复制到插件文件夹中,然后加载它。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString sDir = QCoreApplication::applicationDirPath();

    a.addLibraryPath(sDir+"/plugins");

    //*********** do your things

    return a.exec();
}

你不需要全部包含它们,只需要你所需的那些。在你的Qt源文件夹下查找 - 在plugins\imageformats文件夹下。有一堆dll文件。你不需要与它们链接,只需要在运行时能找到它们,就像这个答案所解释的那样。所以例如,如果你正在使用ico文件,则需要qico4.dll。如果你加载jpeg文件,则需要qjpeg4.dll。上面的答案告诉Qt在需要时在哪里查找插件。 - Liz
@Liz,您能否详细说明一下?我认为我遇到了qico4.dll的问题,请参见.ico图标在Windows上无法显示 - Ali
我正要展开讲解,但是我看了你链接的问题,似乎你已经得到了答案。 - Liz

0

解决问题的另一种方法是qrs


0

1
仅提供页面链接并不意味着它是答案。您也可以通过评论来帮助他 :-) - jparthj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接