qt生成lib库,想加入几个只读文件,我利用资源文件,可惜Qfile打开错误,求助各位!谢谢

不易易 2018-10-29 04:54:47
加精
如题!
lib库里要用到几个固定的只读文件,想加到里面;怎么加?怎么打开?求助!~谢谢

我用资源文件加入,可是Qfile打开错误,如下:
...全文
1812 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lst0426 2019-10-06
  • 打赏
  • 举报
回复
这个很值得学习
YZSY520 2019-02-17
  • 打赏
  • 举报
回复
先去只读,用cpp形成整入。
weixin_43583692 2018-11-02
  • 打赏
  • 举报
回复

只能给一个大大的赞
小五666\n哈哈 2018-11-02
  • 打赏
  • 举报
回复
引用 23 楼 cpongo5 的回复:
引用 21 楼 weixin_43583692 的回复:
只能给一个大大的赞
非常赞同,赞
真的是这样的,哈哈
小五666\n哈哈 2018-11-02
  • 打赏
  • 举报
回复
引用 21 楼 weixin_43583692 的回复:
只能给一个大大的赞
非常赞同,赞
不易易 2018-11-01
  • 打赏
  • 举报
回复
引用 16 楼 qq_40450386 的回复:
[quote=引用 14 楼 sugar13 的回复:]
注册函数的名字是跟资源文件的名字有关的,资源叫“temp.qrc”,那么注册函数的名字就是qInitResources_temp。调用的时候会找不到函数声明,因此需要自己手动声明一下再调用:


int qInitResources_temp();
qInitResources_temp();

非常感谢!!!加上这两句就成了!!!虽然原理不太懂~
另:初始化一次就可以吧,用个static变量?[/quote]

ok!结贴!
再次感谢各位!
怪叔叔萝莉控 2018-11-01
  • 打赏
  • 举报
回复
引用 16楼 不易哥的回复:
<fieldset><legend class="font_bold">引用 14 楼 sugar13 的回复:</legend><blockquote>注册函数的名字是跟资源文件的名字有关的,资源叫“temp.qrc”,那么注册函数的名字就是qInitResources_temp。调用的时候会找不到函数声明,因此需要自己手动声明一下再调用:<br /> <br /> <pre class="brush: c"><br />     int qInitResources_temp();<br />     qInitResources_temp();<br /> </pre></blockquote></fieldset><br /> 非常感谢!!!加上这两句就成了!!!<img src="https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/83.gif" alt="" />虽然原理不太懂~<img src="https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/13.gif" alt="" /><br /> 另:初始化一次就可以吧,用个static变量?
你说的很有道理,我试试
怪叔叔萝莉控 2018-11-01
  • 打赏
  • 举报
回复
很不错很不错很不错很
不易易 2018-11-01
  • 打赏
  • 举报
回复
引用 14 楼 sugar13 的回复:
注册函数的名字是跟资源文件的名字有关的,资源叫“temp.qrc”,那么注册函数的名字就是qInitResources_temp。调用的时候会找不到函数声明,因此需要自己手动声明一下再调用:


int qInitResources_temp();
qInitResources_temp();

非常感谢!!!加上这两句就成了!!!虽然原理不太懂~
另:初始化一次就可以吧,用个static变量?
  • 打赏
  • 举报
回复
引用 10 楼 qq_40450386 的回复:
file.errorString(): No such file or directory
另:大家试过吗?在lib库里加入资源,库函数访问他。希望我们理解的一样!
谁有例子麻烦发个:1328512592@qq.com,谢谢了!
你仔细检查资源路径,我拿你的例子都能做成功。检查qrc_xxx.cpp,看你的路径。
不易易 2018-10-31
  • 打赏
  • 举报
回复
file.errorString(): No such file or directory
另:大家试过吗?在lib库里加入资源,库函数访问他。希望我们理解的一样!
谁有例子麻烦发个:1328512592@qq.com,谢谢了!
失散糖 2018-10-31
  • 打赏
  • 举报
回复
注册函数的名字是跟资源文件的名字有关的,资源叫“temp.qrc”,那么注册函数的名字就是qInitResources_temp。调用的时候会找不到函数声明,因此需要自己手动声明一下再调用:

    int qInitResources_temp();
    qInitResources_temp();
失散糖 2018-10-31
  • 打赏
  • 举报
回复
静态库里边,未使用的符号会被忽略,无法添加到目标程序中。观察一下qrc_temp.cpp里的内容,最下边有个名叫dummy的全局变量对吧,静态库中的资源,是有相应的初始化函数来注册的,我估计就是这个变量的构造函数帮忙注册的。由于这个变量未被使用,因此注册函数未被调用。可以主动调用一下,包装出一个初始化函数,在初始化时调用一下那个名字qInitResources_???的注册函数就行了
不易易 2018-10-31
  • 打赏
  • 举报
回复
引用 11 楼 sugar13 的回复:
你的lib库是静态库还是动态库?这个库是静态链接到qt还是动态链接到qt?qfile的调用发生在可执行文件中还是在库中?

我试过在动态库中的代码加载动态库中的资源,是没有问题的,只不过我用的是qicon加载图片,没有用qfile试过。

静态库,库代码QFile访问库中资源。一直没成功!
失散糖 2018-10-31
  • 打赏
  • 举报
回复
你的lib库是静态库还是动态库?这个库是静态链接到qt还是动态链接到qt?qfile的调用发生在可执行文件中还是在库中? 我试过在动态库中的代码加载动态库中的资源,是没有问题的,只不过我用的是qicon加载图片,没有用qfile试过。
  • 打赏
  • 举报
回复
引用 5 楼 qq_40450386 的回复:
资源原文:
0 1
1 0

qrc_temp.cpp里部分内容:
static const unsigned char qt_resource_data[] = {
// E:/qt_cs/nist_3_2/nist/templates/template2
0x0,0x0,0x0,0x8,
0x30,
0x20,0x31,0xa,0x31,0x20,0x30,0xa,

};

static const unsigned char qt_resource_name[] = {
// templates
0x0,0x9,
0x4,0x72,0x7f,0x43,
0x0,0x74,
0x0,0x65,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x61,0x0,0x74,0x0,0x65,0x0,0x73,
// template2
0x0,0x9,
0x4,0x72,0x7f,0x2,
0x0,0x74,
0x0,0x65,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x61,0x0,0x74,0x0,0x65,0x0,0x32,

};

static const unsigned char qt_resource_struct[] = {
// :
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
// :/templates
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
// :/templates/template2
0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,

};

cpp是自动生成的,错了也不知道为什么哦
你这里看不到template10的资源。你看那些注释。所以你一直打不开。你要是读取:/templates应该就有了
绝版紫太狼 2018-10-30
  • 打赏
  • 举报
回复
用资源管理器打开,然后右键复制路径。 或者看看你资源有木有加进去。
不易易 2018-10-30
  • 打赏
  • 举报
回复
资源原文:
0 1
1 0

qrc_temp.cpp里部分内容:
static const unsigned char qt_resource_data[] = {
// E:/qt_cs/nist_3_2/nist/templates/template2
0x0,0x0,0x0,0x8,
0x30,
0x20,0x31,0xa,0x31,0x20,0x30,0xa,

};

static const unsigned char qt_resource_name[] = {
// templates
0x0,0x9,
0x4,0x72,0x7f,0x43,
0x0,0x74,
0x0,0x65,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x61,0x0,0x74,0x0,0x65,0x0,0x73,
// template2
0x0,0x9,
0x4,0x72,0x7f,0x2,
0x0,0x74,
0x0,0x65,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x61,0x0,0x74,0x0,0x65,0x0,0x32,

};

static const unsigned char qt_resource_struct[] = {
// :
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
// :/templates
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
// :/templates/template2
0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,

};

cpp是自动生成的,错了也不知道为什么哦
  • 打赏
  • 举报
回复
引用 3 楼 qq_40450386 的回复:
[quote=引用 1 楼 dcmilan 的回复:]
你在资源编辑器里添加文件后
重新编译,让资源二进制化
生成对应的qrc_temp.cpp
你看这个文件有没有正确生成

加入资源文件后,lib库也明显增大了,可是在库函数里QFile打开老是报错!郁闷啊~[/quote]你的文件内容是什么,贴出来
不易易 2018-10-30
  • 打赏
  • 举报
回复
引用 1 楼 dcmilan 的回复:
你在资源编辑器里添加文件后
重新编译,让资源二进制化
生成对应的qrc_temp.cpp
你看这个文件有没有正确生成

加入资源文件后,lib库也明显增大了,可是在库函数里QFile打开老是报错!郁闷啊~
加载更多回复(4)

16,201

社区成员

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

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