Qt image resource is null
-
Hi folks
It seems like this has been posted and asked a lot, but I've done just about every step I can find, and nothing is working, so I need help!
I need to set an image as a qt resource, and load it in as the background of a Qchart.So here's what I've done:
Saved the image into a sub-directory in my program.
created a qrc file named resources.qrc. Here's the contents of that file:<RCC> <qresource> <file>images/scribble.jpg</file> </qresource> </RCC>
Modified the .pro file with the following contents:
RESOURCES += extra/resources.qrc
Attempted to load the file with the following code, and done some null checking:
QImage my_image(":/images/scribble.jpg"); if(my_image.isNull()) { outputTextBox->append("image is null"); }
I've also tried:
QImage my_image; my_image.load(":/images/scribble.jpg");
I've completely removed my build folder on the build system and re-initialized the repo and rebuilt the code, but that isn't changing anything either.
I've confirmed it's finding the resources.qrc by changing both the name and filepath of the qrc file, which throws errors when I run qmake ---.pro
I've also changed the filepath in the code, i.e. QImage my_image(":/images/scrible.jpg"); or QImage my_image(":/imag/scribble.jpg"); which results in Qt throwing an error on the command line that says the image is not found at runtime. (note the intentional spelling errors)So it seems to me that it's finding the image and qrc file, but despite that, is not able to load it in for some reason.
What am I doing wrong?? -
Do you actually add the resource to your application?
-
Hi,
Can you show the structure of your project ?
Did you try to load the file from the disk just to check that it loads properly ?
-
@Christian-Ehrlicher
Yes, it's in a folder, available to the application. Like I mentioned, if I change the filepath or name in the code, it throws an error saying it can't find it - so it does seem to be finding it but isn't reading it somehow? -
My project structure is:
project
-headers
*.h
-sources
-main.cpp
*.cpp (file that calls the image is in here)
-extra
-resources.qrc
-images
-scribble.jpgI think that's all the relevant info on my structure. What's a way to load the file from disk to see that my program sees it?
-
@Kelenyche said in Qt image resource is null:
My project structure is:
project
-headers
*.h
-sources
-main.cpp
*.cpp (file that calls the image is in here)
-extra
-resources.qrc
-images
-scribble.jpgI think that's all the relevant info on my structure. What's a way to load the file from disk to see that my program sees it?
Oh none of my nice spacing came through lol.
-
Try editing it with coding tags.
For the test, just use the full path to the file on the disk.
-
Next step: start your application with the QT_DEBUG_PLUGINS environment variable set to 1 to see what's going on with the image plugins.
-
On the command line directly
-
Ah, ok so I ran:
QT_DEBUG_PLUGINS=1 ./program
and it dumped a bunch of info. I'm not seeing any problems or failures in here...?Got keys from plugin meta data ("ico", "cur") QFactoryLoader::QFactoryLoader() looking at "/usr/lib/aarch64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so" Found metadata in lib /usr/lib/aarch64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so, metadata= { "IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface", "MetaData": { "Keys": [ "jpg", "jpeg" ], "MimeTypes": [ "image/jpeg", "image/jpeg" ] }, "className": "QJpegPlugin", "debug": false, "version": 330499 }
This seems like the most relevant portion, but again it seems to have succeeded in recognizing jpgs, so I don't see a problem. Let me know if there's anything else I should be looking for. I'm not seeing parts that are specific to my code, it just looks like Qt's background stuff for loading certain plugins.
-
@Kelenyche said in Qt image resource is null:
Ah, ok so I ran:
QT_DEBUG_PLUGINS=1 ./program
and it dumped a bunch of info. I'm not seeing any problems or failures in here...?Got keys from plugin meta data ("ico", "cur") QFactoryLoader::QFactoryLoader() looking at "/usr/lib/aarch64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so" Found metadata in lib /usr/lib/aarch64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so, metadata= { "IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface", "MetaData": { "Keys": [ "jpg", "jpeg" ], "MimeTypes": [ "image/jpeg", "image/jpeg" ] }, "className": "QJpegPlugin", "debug": false, "version": 330499 }
This seems like the most relevant portion, but again it seems to have succeeded in recognizing jpgs, so I don't see a problem. Let me know if there's anything else I should be looking for. I'm not seeing parts that are specific to my code, it just looks like Qt's background stuff for loading certain plugins.
This chunk also seems like it recognized that it needs jpgs:
Got keys from plugin meta data ("svg", "svgz") QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/program/imageformats" ... loaded library "/usr/lib/aarch64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so" QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/aarch64-linux-gnu/qt5/plugins/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/program/accessible" ... QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/aarch64-linux-gnu/qt5/plugins/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/pi/Desktop/program/accessiblebridge" ... QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines" ... QFactoryLoader::QFactoryLoader() looking at "/usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so" Found metadata in lib /usr/lib/aarch64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so, metadata= { "IID": "org.qt-project.Qt.QIconEngineFactoryInterface", "MetaData": { "Keys": [ "svg", "svgz", "svg.gz" ] }, "className": "QSvgIconPlugin", "debug": false, "version": 330499 }
-
That part looks good.
And I am guessing that it also says somewhere that the plugin was successfully loaded ?The next step: did you check that the file is a valid jpeg ?
-
Yea I can't find any problems in that debug info, no failures or anything.
I actually created the jpg in paint, it's literally just some scribbles. I have a .png I've been trying to use but no luck, so I wanted to try a different file type, with a differently formatted name to see if anything would change. I don't see how it wouldn't be a valid jpg, having just saved it from paint?
-
Getting really strange...
No special characters in the path ? Not that it should play a role but who knows...
If you use QFile to open it, does it work ?
-
Nope, the full path is: "/home/pi/Desktop/program/extra/images/scribble.jpg"
Alright I'm not familiar with QFile, but I used:
QFile testfile("/home/pi/Desktop/program/extra/images/scribble.jpg"); if(testfile.exists()) { outputTextBox->append("opened the file"); }
and it seems to have succeeded.
will testfile.exists() do the same test as isNull in QImage? -
No, it just confirms the existence of the file not whether it is valid.
Use the QImageReader class. It's lower level but may give you more information about what is going wrong.
-