【求教】关于Qt中显示JPG图片 数据库驱动没有加载的问题

影风骑士 2010-10-21 09:06:21
我的开发环境是VS2005+Qt4.2.2
1.
本机上可以加载图片,但是拷贝到另一台机器上(裸机,仅有XP系统),DLL都拷贝过去,还是不能够加载图片,
网上有文章说要加#include <QtPlugin>,可我这个版本4.2.2没有这个文件夹啊,另外我也不是使用生成.pro文件的方式,不知道各位大虾是否遇到过类似问题,可有解决方法,还请各位不吝赐教啊,这个问题一直卡在这里。
2.
另一个问题是有关数据库驱动没有加载的,程序启动后会加载数据库,但是一运行程序就会弹出“driver not loaded”,我使用的数据库是SQLite,连接数据库的代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("nodedata.db");
弹出的对话框是在db打开失败后弹出的“db.lastError().text()”,不知道这里面有什么问题,因为在同一台机器上我打开sqlitebrowser是没有问题的,那肯定应该是我的代码写的有问题了,还烦请大家指正。
第一次发帖提问,还请多多帮助。
...全文
587 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoulRed 2011-06-20
  • 打赏
  • 举报
回复
http://hi.baidu.com/cyclone/blog/item/d77a86182fb915b84bedbc57.html

需在用户机器上安装1M多的VS2008可再发行包 vcredist_x86.exe 即可

或者将文件夹
<Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT
当采用这种方法时,如果同时发布插件(包括图片插件等),那么插件编译时必须:
CONFIG-=embed_manifest_dll
使得生成的插件中不嵌入manifest文件,否则插件不被程序识别(其实也可以识别,只要将 Microsoft.VC90.CRT 拷贝一份和插件放到同一文件夹即可,当然这种方式很不好,如果插件分布在几个目录下,要放置Microsoft.VC90.CRT的很多副本)。
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
真正的问题是,你对一些基本的概念似乎很不清楚。比如动态和静态的插件,再比如,你竟然会尝试运行 qmake Makefile
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dmt45 的回复:]

9:first: make_default
10:MAKEFILE = Makefile
11:QMAKE = qmake

qmake Makefile,第九行一直报错Qt\4.2.2\makefile:9: Parse Error ('first: make_default')
好累啊,搞了一天多了
[/Quote]
插件问题,说到底还是蛮简单的。
对于默认的动态情况,无法是让程序运行时能找到它:如何找到?不外乎
1. 把插件放到 程序默认去找的目录下。比如,在有Qt开发环境的系统中,它会去Qt安装目录下的plugins目录的相应子目录找。再比如,exe程序所在目录下的特定目录
2. 插件随便放,然后告诉你的程序去那个目录找

对于静态插件(其实就是一个静态库了,个人觉得都不该叫插件了)。编译链接时直接将其链接上就行了,没多少可说的。
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dmt45 的回复:]

其实我的问题应该不是发布的问题,因为我已经能够在另一台机器上打开并且运行程序了,就是程序运行的部分功能不全,对于数据库驱动那块,我感到很困惑
[/Quote]
这是典型的发布问题,其实。
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
其实我的问题应该不是发布的问题,因为我已经能够在另一台机器上打开并且运行程序了,就是程序运行的部分功能不全,对于数据库驱动那块,我感到很困惑
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
9:first: make_default
10:MAKEFILE = Makefile
11:QMAKE = qmake

qmake Makefile,第九行一直报错Qt\4.2.2\makefile:9: Parse Error ('first: make_default')
好累啊,搞了一天多了
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
1. 确保你这两个插件是静态编译的!(不然不要这么用)

2. 在 pro 文件内添加语句,启用该插件。
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
#include <QObject>
#include <QApplication>
#include <QtPlugin>

Q_IMPORT_PLUGIN(qjpeg)
Q_IMPORT_PLUGIN(qsqlite)

加入了这段代码之后,程序一直报错:
错误 1 error LNK2019: 无法解析的外部符号 "class QObject * __cdecl qt_plugin_instance_qjpeg(void)" (?qt_plugin_instance_qjpeg@@YAPAVQObject@@XZ),该符号在函数 "public: __thiscall StaticqjpegPluginInstance::StaticqjpegPluginInstance(void)" (??0StaticqjpegPluginInstance@@QAE@XZ) 中被引用 topologymainwindow.obj
错误 2 error LNK2019: 无法解析的外部符号 "class QObject * __cdecl qt_plugin_instance_qsqlite(void)" (?qt_plugin_instance_qsqlite@@YAPAVQObject@@XZ),该符号在函数 "public: __thiscall StaticqsqlitePluginInstance::StaticqsqlitePluginInstance(void)" (??0StaticqsqlitePluginInstance@@QAE@XZ) 中被引用 topologymainwindow.obj
QT中使用宏的方法是直接使用吗?无需其他声明了
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
谢谢楼上的,正在阅读。
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
另外,你提到Qt4.2没有 #include<QtPlugin>,绝对的是错的
http://doc.qt.nokia.com/4.2/plugins-howto.html

不过,你的插件不是静态编译的,这个东西对你来说没什么用处
静态编译,可参考
http://hi.baidu.com/cyclone/blog/item/25b262d9337a172310df9b78.html
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
4.2 的官方指南 http://doc.qt.nokia.com/4.2/deployment-windows.html

另外,你可以参考
http://hi.baidu.com/cyclone/blog/item/d77a86182fb915b84bedbc57.html
(我没用过VS2005,也没用过Qt4.2,所以我不能保证Qt4.5~Qt4.7 + Mingw/VS2008 的方式对 Qt4.2 完全使用,但对Qt4.2来说,至少这儿的思想思想99%都是对的)

对插件来说,一个是路径问题!!(因为插件是运行时动态加载)

对 VS2005以上版本的VS来说,manifest 是特别要小心的
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dbzhang800 的回复:]
真正的问题是,你对一些基本的概念似乎很不清楚。比如动态和静态的插件,再比如,你竟然会尝试运行 qmake Makefile
[/Quote]
是的,因为我学习的时候就是在windows下面,由编译器做好所有的工作,唉,要是在Linux下面,估计我就没这么轻松了,谢谢你
影风骑士 2010-10-21
  • 打赏
  • 举报
回复
问题找到了,必须在当前的应用程序目录下,新建两个文件夹,分别命名为imageformats、sqldrivers,imageformats中存放qjpegd1.dll即可,因为我生成的是debug版本,sqldrivers中存放qsqlited.dll。
估计在生成项目的时候,默认到这两个文件夹下面寻找存放插件dll的文件夹。

16,227

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧