[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