• 15359阅读
  • 18回复

[讨论]qt发布问题:qt.conf配置文件无效 [复制链接]

上一主题 下一主题
离线tommychenye
 

只看楼主 倒序阅读 楼主  发表于: 2014-08-10
qt版本:5.3.1 minGW
系统环境:win7
程序版本:release
已有的环境:Qt5Core.dll等相关库,plugins目录下的platforms sqldrivers和imageformats
qt.font文件内容:

Prefix=../
Plugins=plugins
Imports=imports
Qml2Imports=qml
目录结构如下:
myapp
......bin
......imports
......plugins
............imageformats
............platforms
............sqldrivers
......qml

程序基于mysql在qml界面上做一些简单的显示数据的配置通过读取ini配置文件,目前打包的问题主要是:
1.如果数据库的配置文件ini格式错误或者这个文件不存在,启动exe 可以正常显示界面,数据为空,所有qml界面的显示都正常;
2.如果数据库的配置文件正确,此时启动exe 程序提示

经过procexp程序查看这两次调用的dll的路径。如下图:
1.  
2.
通过比较发现 qwindows.dll 和plugins下得imageformats内的所有dll文件两次调用的路径不同,第一种情况和qt.conf中得路径一致,第二种情况则不一致。
也就是说当程序正确连接数据库后 调用的plugins的目录并不是qt.conf配置的路径,就是程序压根没读取这个qt.conf配置,这就给我发布程序的时候带来很大的问题,别人电脑上没有安装qt环境的话就没法通过qt.conf找到plugins目录,也就不能正常运行。

问题描述完了,如果有不清楚的地方请指出,不知道有谁遇到过类似的问题,或者说我的配置不正确? 还有就是能不能通过添加系统环境变量让未安装qt的win7也能找到plugins目录。
离线tommychenye

只看该作者 1楼 发表于: 2014-08-10
qt.conf的配置文件第一行应该是 【paths】 没显示出来
离线tommychenye

只看该作者 2楼 发表于: 2014-08-14
目前测试win7下 qt5.3.1 只要使用数据库功能,程序打包后  qt.conf配置文件无效。。。。。。。。。。 ,求大神测试验证下是普遍问题还是就我rp不行,或者说我测试有误。。。。。只有看的没有回复的么?
离线tommychenye

只看该作者 3楼 发表于: 2014-08-15
自问自答了,Qt5Core.dll 会调用plugins中得dll, 调用路劲是在安装qt后就写死了,所以在发布的时候需要在发布电脑上创建相同的路劲,把plugin中得dll复制进去,这只是个临时解决方案,至于程序为什么还是不按照qt.conf中得路劲读取还是没有得到解决。
离线彩阳

只看该作者 4楼 发表于: 2014-08-29
尝试一下将Qt程序放在plugins文件夹中,然后再运行一下。
借着将plugins文件夹放在一个干净的文件夹下,一个插件一个插件删除,直到程序不能运行为止。
1条评分金钱+5
tommychenye 金钱 +5 感谢帮忙 2014-09-05
上海Qt开发联盟,热忱地欢迎你的加入!
离线alexltr

只看该作者 5楼 发表于: 2014-09-02
platforms目录好像要放在myapp同级的目录。
1条评分金钱+5
tommychenye 金钱 +5 感谢 2014-09-05
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线tommychenye

只看该作者 6楼 发表于: 2014-09-04
回 彩阳 的帖子
彩阳:尝试一下将Qt程序放在plugins文件夹中,然后再运行一下。
借着将plugins文件夹放在一个干净的文件夹下,一个插件一个插件删除,直到程序不能运行为止。 (2014-08-29 14:17) 

这个我也试过,就是将app所在路径和platforms等目录放在同一层,会提示找不到platforms里面的dll,按照官方打包说明这应该正确的打包方法,但是在我这就不行,如果不使用数据库相关功能,打包是没问题的,所以这点让我很郁闷
离线tommychenye

只看该作者 7楼 发表于: 2014-09-04
回 alexltr 的帖子
alexltr:platforms目录好像要放在myapp同级的目录。 (2014-09-02 23:04) 

已经试过了,现在的问题是不适用数据库相关功能打包就没问题,用了就不行,很头疼
离线彩阳

只看该作者 8楼 发表于: 2014-09-04
回 tommychenye 的帖子
tommychenye:这个我也试过,就是将app所在路径和platforms等目录放在同一层,会提示找不到platforms里面的dll,按照官方打包说明这应该正确的打包方法,但是在我这就不行,如果不使用数据库相关功能,打包是没问题的,所以这点让我很郁闷 (2014-09-04 08:40) 

“不行”是指会报什么错误呢?找不到dll,还是找不到插件?
上海Qt开发联盟,热忱地欢迎你的加入!
离线tommychenye

只看该作者 9楼 发表于: 2014-09-04
回 彩阳 的帖子
彩阳:“不行”是指会报什么错误呢?找不到dll,还是找不到插件? (2014-09-04 09:27) 

could not find or load the Qt platform plugin “windows”,这个问题应该是没找到platforms下得qwindows.dll
离线zhanglyl

只看该作者 10楼 发表于: 2014-09-04
这个问题,我前段时间也遇到过,搜遍google 和stackoverflow,都无解。建议采取下面两步试试:
1、在main中加入:
qDebug() << QApplication::libraryPaths();
看是不是正常?

2、我的程序没有用数据库,用的图像处理相关的插件dll,当时我自己编译Qt 5,在jpeg的选项时漏掉了,调式模式下,加载jpeg正常,发布时,跟你一样,死活弹出错误,跟你的一模一样!
我的排错过程也跟你一样,逐个对比,也没发现问题,后来找到我当初编译的参数,才觉得是我的Qt编译不全。木办法,就硬加载插件dll,如下:
在main中添加
QPluginLoader ploader("qjpeg.dll");
ploader.load();

另外,pro项目文件中,需加:
QTPLUGIN +=qjpeg

你是关于数据库方面的,修改为数据库的插件库。
1条评分金钱+10
tommychenye 金钱 +10 目前最好的解决方法 2014-09-05
离线tommychenye

只看该作者 11楼 发表于: 2014-09-04
回 zhanglyl 的帖子
zhanglyl:这个问题,我前段时间也遇到过,搜遍google 和stackoverflow,都无解。建议采取下面两步试试:
1、在main中加入:
qDebug() << QApplication::libraryPaths();
看是不是正常?
....... (2014-09-04 14:28) 

好的,我立马试试
离线alexltr

只看该作者 12楼 发表于: 2014-09-04
1. 把以下这句或前面两句去掉,并把platforms目录放在myapp同级的目录。
    Plugins=plugins
    因为你的目录结构是Qt程序的默认结构。 我的数据库程序从来没有用过qt.conf这个文件,发布没有问题。

2. 如果上面的方法不行。 那我怀疑是第一句的路径不正确。 请阅读Qt文档Using qt.conf这一章节,上面说Absolute paths are used as specified in the qt.conf file.  Prefix=应使用绝对路径。

试试看,Good luck!
1条评分金钱+5
tommychenye 金钱 +5 虽然没成功,还是很感谢帮忙啊 2014-09-05
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线tommychenye

只看该作者 13楼 发表于: 2014-09-05
回 alexltr 的帖子
alexltr:1. 把以下这句或前面两句去掉,并把platforms目录放在myapp同级的目录。
    Plugins=plugins
    因为你的目录结构是Qt程序的默认结构。 我的数据库程序从来没有用过qt.conf这个文件,发布没有问题。
2. 如果上面的方法不行。 那我怀 .. (2014-09-04 23:51) 

conf文件使用绝对路径 和 platforms拷贝到exe同级目录都试过了,提示错误还是找不到plugin “windows”
离线tommychenye

只看该作者 14楼 发表于: 2014-09-05
回 zhanglyl 的帖子
zhanglyl:这个问题,我前段时间也遇到过,搜遍google 和stackoverflow,都无解。建议采取下面两步试试:
1、在main中加入:
qDebug() << QApplication::libraryPaths();
看是不是正常?
....... (2014-09-04 14:28) 

用你的办法果然搞定了,感激涕零啊,不知道大虾后来有没有深入研究下造成这个问题的主要原因呢,是windows下程序qt安装包的问题?还是pro配置的不全?如果下次使用别的plugins下得dll 还是要这么加?
离线tommychenye

只看该作者 15楼 发表于: 2014-09-05
目前最好的解决方法
离线tommychenye

只看该作者 16楼 发表于: 2014-09-05
回 zhanglyl 的帖子
zhanglyl:这个问题,我前段时间也遇到过,搜遍google 和stackoverflow,都无解。建议采取下面两步试试:
1、在main中加入:
qDebug() << QApplication::libraryPaths();
看是不是正常?
....... (2014-09-04 14:28) 

实验之后发现,只要在pro文件中添加QTPLUGIN += xxxx 就能解决conf配置文件无效的问题xxx就是自己程序所需的扩展库名称
离线zhanglyl

只看该作者 17楼 发表于: 2014-09-10
回 tommychenye 的帖子
tommychenye:用你的办法果然搞定了,感激涕零啊,不知道大虾后来有没有深入研究下造成这个问题的主要原因呢,是windows下程序qt安装包的问题?还是pro配置的不全?如果下次使用别的plugins下得dll 还是要这么加? (2014-09-05 10:35) 

QT本身的编译选项很多,根据自己的实际应用,应该核实QT发布版本的编译选项。官方发布的版本只是一些通用的编译参数。如果自己的项目碰巧没有被编译进去,要么手动加载,要么重新编译!
离线zhanglyl

只看该作者 18楼 发表于: 2014-09-10
回 tommychenye 的帖子
tommychenye:用你的办法果然搞定了,感激涕零啊,不知道大虾后来有没有深入研究下造成这个问题的主要原因呢,是windows下程序qt安装包的问题?还是pro配置的不全?如果下次使用别的plugins下得dll 还是要这么加? (2014-09-05 10:35) 

QT本身的编译选项很多,根据自己的实际应用,应该核实QT发布版本的编译选项。官方发布的版本只是一些通用的编译参数。如果自己的项目碰巧没有被编译进去,要么手动加载,要么重新编译!

QT很强大,也很自由,但在具体应用方面,还要具体对待。一起学习,共同进步吧!
快速回复
限100 字节
 
上一个 下一个