• 7603阅读
  • 5回复

本机上生成的.exe文件,移植到其他机器上图片显示不全。。 [复制链接]

上一主题 下一主题
离线inolddays
 

只看楼主 倒序阅读 楼主  发表于: 2009-05-04
windows 下 开发的QT小程序。。。

void InfoList::addPiece(QPixmap pixmap,int type,QString picName,int uniquePosition)
{
    QListWidgetItem *pieceItem = new QListWidgetItem(this);
    pieceItem->setIcon(QIcon(pixmap));
    pieceItem->setData(Qt::UserRole, QVariant(pixmap));
    pieceItem->setData(Qt::UserRole+1, type);
    //add  pic's name to each listItem ..
    pieceItem->setData(Qt::UserRole+2, picName);
    pieceItem->setData(Qt::UserRole+3,uniquePosition);
    pieceItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable
                        | Qt::ItemIsDragEnabled);
    this->addItem(pieceItem);
}

这个方法是将listwidgetitem(setIcon方法嵌入图片)  加入 listwidget 中。。。

问题出现了:
本机可以显示的图片,在其它机器上有的不能显示。。
在listwidget上表现出来的就是空白。。

我自己感觉代码问题不大,是不是要在其他机器上也装QT的什么东西吗?
为什么呢?

处于严重的困惑中,希望有类似经验的大牛给点儿指引。。

谢谢先。。。

离线茶亭量子
只看该作者 1楼 发表于: 2009-05-04
你的pixmap从什么地方来的,这种情况一般都是图片路径不对,程序找不到图片资源。可以用qrc来管理资源文件。
生命在于运动。
没有做不到,只有想不到。
http://hi.baidu.com/kernel_linux
离线duduqq

只看该作者 2楼 发表于: 2009-05-04
做成资源文本或者是外部二进制资源文件。
离线senfrans

只看该作者 3楼 发表于: 2009-05-05
在Assistant里查“Deploying Qt Applications"


动态编译

动态编译就很容易了。用QT的默认安装,把生成的release下的exe文件,和下面几个核心文件放在一个文件夹里:

MINGWM10.DLL
QTGUI4.DLL
QTCORE4.DLL

VC2005编译程序运行时需要的几个dll文件
Microsoft.VC80.CRT.manifest 位于x:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\\Microsoft.VC80.CRT
msvcm80.dll
msvcp80.dll
msvcr80.dll
QtCore4.dll
QtGui4.dll

这样就可以运行了。但图片文件还是可能显示不出来,解决办法:
把程序文件夹里,建立一个imageformats目录(必须是这个名字),把qt目录下的plugin/imageformats目录下对应的dll文件copy过去。这样动态连接就完成了。

注:可以用微软的Dependency Walker tool工具,就是一个depends.exe的程序,来查看一个exe文件跟哪些dll关联。

注:需要在完全没有装QT的系统上测试发布的程序有没有DLL依赖问题。
离线inolddays

只看该作者 4楼 发表于: 2009-05-06
谢过三楼,就是拷贝qt里的image_formats dll文件。。
问题已解决。。
thanks a lot !
离线lvyes1988
只看该作者 5楼 发表于: 2011-03-31
用在其他机子上显示bmp和jpg之外的图片需要带上图片插件
1.把Qt安装目录中的plugins\imageformats文件夹整个复制到程序目录下
2.在程序的主函数中添加QApplication.addLibraryPath("./imageformats");
快速回复
限100 字节
 
上一个 下一个