Solved Qt resource not showing up in static build...
-
@kshegunov it's MinGW. This isn't an area I'm especially knowledgeable in, but it seems that it's the toolchain (specifically the linker) that decides what does and doesn't go into an executable.
By the way, if you avoid static images, how do you deliver standalone apps to customers?
-
@mzimmers said in Qt resource not showing up in static build...:
By the way, if you avoid static images, how do you deliver standalone apps to customers?
You can use an install maker
to deliver the .exe and its support dlls.
Qt even has its own tool
http://doc.qt.io/qtinstallerframework/Static linking requires a Qt license so many of us , do it via an installer.
-
@mzimmers said in Qt resource not showing up in static build...:
By the way, if you avoid static images, how do you deliver standalone apps to customers?
One of the ways is to compile them in the binary, but as @mrjj noted you can also use an external (compiled) resource file and also you could possibly use an installer that delivers them raw in folders.
What about theQ_IMPORT_PLUGIN
question? -
@kshegunov I didn't see your plugin question until now...the answer is no, I didn't do that.
What exactly is the plug-in here: the .svg file, or the .qrc file that identifies it?
-
Aha, it may be the reason why it can't load the image; your issue might've been completely unrelated to the resource file.
The plugin is a library - and extension to Qt - that is loaded when your program starts. Plugins provide means to access different 3rd party file/image formats, databases and such. It's usually not needed to care about it when you use dynamic Qt build, because Qt will take care to load it at the appropriate time, however because of technical reasons this is not possible when Qt is build statically (and with static plugins) and you need to do the initialization manually.
-
So, I added this to main.cpp:
Q_IMPORT_PLUGIN(qsvg);
And this to my .pro file:
QTPLUGIN += qsvg
I now get a build error:
C:\Users\MZimmers\Qt projects\removed\main.cpp:-1: error: undefined reference to `qt_static_plugin_qsvg()'
So, do I need to build and use a library in order to take advantage of this feature?
-
@mzimmers said in Qt resource not showing up in static build...:
So, do I need to build and use a library in order to take advantage of this feature?
Yes, the plugin itself. See what you have in
<QtBase>/plugins/imageformats
(I have a list of them one of which islibqsvg.so
) you should have your plugins there (you'd expect to see.lib
files)? If there are not then you haven't built them and that'd be the reason why the linker is complaining. -
OK, I think we're zeroing in on this. My build of Qt with dynamic libraries is in:
C:\Qt\5.9.1\mingw53_32\plugins\imageformats
And all the .dlls are indeed there.
When I built my static version, I put it in \Qt\Static. Somehow, the 5.9.1 directory remained empty, but I do have a directory:
C:\Qt\Static\plugins\imageformats
With all the necessary .a files.
So, maybe the problem is that I screwed something up when I built my static version of Qt?
-
I think we have a solution:
I read the 5.0 version of the plugins doc: http://doc.qt.io/qt-5/plugins-howto.html. The wording is a little different, but it seems that the Q_IMPORT_PLUGIN is used when you want to create your own plugins, not use pre-existing ones. So I removed that file and it builds. The static version now displays the .svg.
Thanks to all who helped...
-
@mzimmers said in Qt resource not showing up in static build...:
With all the necessary .a files.
Nope, there's no error. MinGW uses linux-style static binaries (i.e.
.a
not.lib
as with MSVC).
I'm glad you solved your problem in the meantime! -
qt5
in .pro QTPLUGIN += qsvg
in main.cpp Q_IMPORT_PLUGIN(QSvgPlugin)qt4
in .pro QTPLUGIN += qsvg
in main.cpp Q_IMPORT_PLUGIN(qsvg)name changed