[SOLVED]can't open file from qresources
-
wrote on 18 Apr 2015, 19:17 last edited by
Ok, let's see if we can copy the file's content to another file:
QFile file(":/plane/j3pipercub.obj"); if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) { qDebug() << "file read error"; return; } const QByteArray ba = file.readAll(); file.close(); QFile file2("/home/pw/piper.obj"); // +++++ ADJUST PATH ++++++ if (!file2.open(QIODevice::WriteOnly)) { qDebug() << "file write error"; return; } qDebug() << file2.write(ba); file2.close();
-
wrote on 18 Apr 2015, 19:21 last edited by
HI,
have you used
Q_INIT_RESOURCE
to initialize the resource?? -
wrote on 18 Apr 2015, 19:22 last edited by
No! where should I initialize it?
-
wrote on 18 Apr 2015, 19:24 last edited by
Hi,
in the
main()
; something likeint main (int argc, char *argv[]) { QApplication app(argc, argv); Q_INIT_RESOURCE(mresources); ..... }
-
Hi,
in the
main()
; something likeint main (int argc, char *argv[]) { QApplication app(argc, argv); Q_INIT_RESOURCE(mresources); ..... }
wrote on 18 Apr 2015, 19:27 last edited by -
wrote on 18 Apr 2015, 19:34 last edited by
@Wieland
Q_INIT_RESOURCE
is needed if the resource is not embedded in the application or on some platformNormally, when resources are built as part of the application, the resources are loaded automatically at startup. The Q_INIT_RESOURCE() macro is necessary on some platforms for resources stored in a static library.
-
@Wieland
Q_INIT_RESOURCE
is needed if the resource is not embedded in the application or on some platformNormally, when resources are built as part of the application, the resources are loaded automatically at startup. The Q_INIT_RESOURCE() macro is necessary on some platforms for resources stored in a static library.
wrote on 18 Apr 2015, 19:36 last edited by A Former User@mcosta Things are a bit strange here. Reading from the resource works. In the code I posted above there is the bytearray ba and it has the correct size, but it contains only null bytes. But only on Hamed's computer! Works on mine. I don't get it.
-
wrote on 18 Apr 2015, 19:37 last edited by
hi,
so you could try to use an alias
<RCC> <qresource prefix="/plane"> <file alias="j3pipercub.obj">j3pipercub.obj</file> </qresource> </RCC>
-
wrote on 18 Apr 2015, 19:46 last edited by
It didn't help either!
-
hi,
so you could try to use an alias
<RCC> <qresource prefix="/plane"> <file alias="j3pipercub.obj">j3pipercub.obj</file> </qresource> </RCC>
wrote on 18 Apr 2015, 19:53 last edited by@mcosta Ok, the code that copies the content from file to file2 works. The new file on the filesystem has the correct content. So the bytearray is not full of zeros. But output via qDebug() doesn't work. The system's locale is English so this should work.
-
wrote on 4 Sept 2023, 18:36 last edited by
I'm Using Qt 6.5.2 and had the same issue and after an hour of digging and testing all your solutions i did some digging on the build folder and i saw this:
in <QBuild_Dir>/<cmake_project_name>/<module_name>_qml_module_dir_map.qrc
<RCC> <qresource prefix="/"> <file alias="/<<<cmake_project_name>>>"><<<QBuild_Dir>>>/<<<cmake_project_name>>></file> </qresource> </RCC>
so there is an alias for the resource!
to use the resource on my C++ code i had to add it to the beginning of the resource path like
before: ":/assets/img.svg" after ":/<cmake_project_name>/assets/img.svg
and it works 👌