[Qt-interest] svg plugin not loaded

Bryce Allen qt at bda.ath.cx
Fri Dec 4 19:07:31 CET 2009


Ok, finally found the solution... I was missing QtSvg4.dll
(QtSvgd4.dll) in the top level application directory. For some reason I
thought svg support was in imageformats/qsvg.dll, and I didn't notice
the QtSvg4.dll in the main qt dir.

On Thu, 3 Dec 2009 17:41:16 -0600
Bryce Allen <qt at bda.ath.cx> wrote:
> Thanks Andrew - unfortunately this has not fixed the problem. I
> finally got QT_DEBUG_PLUGINS=1 to display output (I think using
> CONFIG += console), and the correct DLLs are found but they fail to
> load, so the problem has nothing to do with paths.
> 
> Strangely if I use a debug exe and dlls, and run the exe from cygwin,
> the svg icon plugin loads and the icons show up. In all other
> cases the svg icon plugin fails to load. Specifically qsvgicon4.dll
> (or qsvgicond4.dll for debug).
> 
> I use the following code to make sure that the qt directory is not
> used, because I want the app to work on any machine without Qt
> installed:
> 
> QStringList pathList;
> pathList.append(qApp->applicationDirPath());
> qApp->setLibraryPaths(pathList);
> 
> I copied the executable built by Qt Designer to a separate
> directory, and copied dlls from the qt subdirectory of the
> qt designer install path, eg C:\Qt\2009.05\qt\bin and
> C:\Qt\2009.05\qt\plugins.
> 
> From cygwin using a debug build and debug dlls, which actually works,
> I get this:
> 
> QFactoryLoader::QFactoryLoader() looking at
> "C:/.../systray/iconengines/qsvgicond.dll"
> keys ("svg", "svgz", "svg.gz")
> 
> When running the same executable from cmd, I get this:
> 
> QFactoryLoader::QFactoryLoader() looking at
> "C:/.../systray/iconengines/qsvgicond.dll"
> keys ("svg", "svgz", "svg.gz")
> QFactoryLoader::QFactoryLoader() looking at
> "C:/.../systray/iconengines/qsvgicond.dll"
> "Cannot load library C:/../systray/iconengines/qsvgicond4.dll: The
> specified module could not be found." could not load
> 
> Note that the paths to qsvgicond4.dll are the same in both lines. Not
> sure why it is examining the same dll twice, but this happens for the
> other builds also.
> 
> When using a release build and release dlls under cmd, I get two
> "The specified module could not be found" errors when it tries to load
> qsvgicon4.dll. Under cygwin I get two "The specified procedure could
> not be found." errors instead.
> 
> I am using the LGPL qt creater, version 2009.05 (1.30, qt 4.6.0). I
> had the same problem with 2009.04, although I'm not sure if the
> QT_DEBUG_PLUGIN output is the same since I got that working after
> upgrading to .05.
> 
> Any ideas?
> 
> Thanks,
> Bryce
> 
> On Tue, 1 Dec 2009 15:11:12 +1100
> Andrew Maclean <andrew.amaclean at gmail.com> wrote:
> > Create a directory called plugins/imageformats (in the same
> > directory as your executable) with the svg plugins in it.
> > Then in your code
> > 
> > Create a function like this:
> > 
> > //! Find and load a translation file.
> > /*!
> >  *
> >  *  @param translator - the translator.
> >  */
> > void PluginLoader(QDir & pluginsDir)
> > {
> >   // Plugins
> >   pluginsDir = QDir(qApp->applicationDirPath());
> > 
> >   #if defined(Q_OS_WIN)
> >      if (pluginsDir.dirName().toLower() == "debug" ||
> > pluginsDir.dirName().toLower() == "release")
> >          pluginsDir.cdUp();
> >   #elif defined(Q_OS_MAC)
> >      if (pluginsDir.dirName() == "MacOS")
> >      {
> >          pluginsDir.cdUp();
> >          pluginsDir.cdUp();
> >          pluginsDir.cdUp();
> >      }
> >   #endif
> >   pluginsDir.setPath( pluginsDir.absolutePath() + "/plugins");
> > }
> > 
> > and in main:
> >   QDir pluginsDir;
> >   PluginLoader(pluginsDir);
> >   QStringList libPaths;
> >   // Append the local plugin path to the qApp library paths
> >   if ( pluginsDir.exists() )
> >   {
> >     libPaths << pluginsDir.absolutePath() << qApp->libraryPaths();
> >     qApp->setLibraryPaths(libPaths);
> >   }
> > 
> > 
> > This should append the plugins path to wherever you put it.
> > 
> > I hope this helps.
> > 
> > Regards
> > Andrew
> > 
> > 
> > On Tue, Dec 1, 2009 at 10:19 AM, Bryce Allen <qt at bda.ath.cx> wrote:
> > > I am trying to run the systray example on a Windows XP machine
> > > without qt installed by placing the proper DLLs in the application
> > > directory. I built the app with Qt Creater 1.2.1 (qt 4.5.3) and
> > > release build config, and my app dir looks like this:
> > >
> > > systray.exe
> > > QtCore4.dll
> > > QtGui4.dll
> > > QtXml4.dll
> > > iconengines\qsvgicon4.dll
> > > imageformats\qsvg4.dll
> > >
> > > I have read the documentation and some relevant posts in the
> > > archives, and this looks like the correct locations for the dlls.
> > > However when I run the app the svg icons are missing. I tried
> > > setting QT_DEBUG_PLUGINS=1 and running systray.exe from cmd, but
> > > no debug info is displayed.
> > >
> > > I also checked QImageReader::supportedImageFormats() and svg is
> > > not in the list, so it appears that it's really a problem with
> > > loading the svg plugin and not with finding the image data. Any
> > > ideas?
> > >
> > > Thanks,
> > > Bryce
> > > _______________________________________________
> > > Qt-interest mailing list
> > > Qt-interest at trolltech.com
> > > http://lists.trolltech.com/mailman/listinfo/qt-interest
> > >
> > 
> > 
> > 
> 




More information about the Qt-interest-old mailing list