Deploying Qt5 on Windows 7: Too Difficult
-
I had read that before, but I didn't notice at the time that ANGLE is included by default. I've added D3DCompiler_43.dll to my program next to my executable and placed the plugins as specified, but I'm still not able to deploy the application.
I used depends profiling on my application on another computer and got did see some Qt error messages pointing to the lines:
@import QtQuick 2.0
import QtMultimedia 5.0@It says the modules "QtQuick" and "QtMultimedia" are not installed. I presume it really means the "QtQuick.2" and "QtMultimedia" folders I found in the directory at: Qt5.0.1\5.0.1\msvc2010\qml. However no matter where I put these folders the application cannot find them. How am I supposed to include "QML Plugins" (as opposed to regular plugins)?
One other .dll Depends found as missing was "Qt5MultimediaQuick_p.dll". While I've heard of similar dlls and plugins for everything else from Qt 4, I haven't heard of this one. What is it used for and do I need it?
-
[quote author="Scorx Ion" date="1363334790"]
Everything I try, I am stuck staring at a blank white screen with no information on what I am doing wrong. It is highly frustrating![/quote]Heh I know what you mean, I'm stuck with the same stuff currently, trying to run the app built on x64 machine for VS2010 x86 on the same machine.
QtQuick 2.0 QML app, getting a full-screen window with nothing but blank white in it. Run from the QtCreator it works nicely. Sigh..
EDIT: Oh and a funny thing. Qt Widgets test app works, also QtQuick 1.1 test app - but none of the QtQuick 2.0 ones. Not our real app, nor a test hello world app. Just white screen. Interesting.
- Matti
-
I needed to include these files for deployment of my application:
D3DCompiler_43.dll
icudt49.dll
icuin49.dll
icuuc49.dll
libEGL.dll
libGLESv2.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Qml.dll
Qt5Quick.dll
Qt5V8.dll
<DIR> QtQuick.2/(all of qml/QtQuick.2 goes here)
<DIR> platforms/qwindows.dllThen I can deploy and run it on another machine.
-
[quote author="Torgeir" date="1363947185"]
<DIR> QtQuick.2/(all of qml/QtQuick.2 goes here)
[/quote]We're building our .qml files into the executable via .qrc. What exactly are you putting into QtQuick.2/ directory ? I would prefer not to ship the qml files separately.. :o
- M
-
Oh Eureka! There indeed was a dir QtQuick.2/ under the SDK; copying this as-is under the application directory did the trick. Sweet, thanks to this thread we even have 2 hours to spare on our deadline. :D
- M
-
Ahem, next issue arises. We're using SQLite from QtQuick 2.0 projects javascript (QtQuick.LocalStorage 2.0) .. and now that we're deploying on windows outside the QtCreator sandbox, none of the SQL stuff works. I havent yet figured out how to make the app log into a console (CONFIG += console does not seem to do the trick) with console.log() so Im not getting much info whats wrong - we tried adding the sqldrivers plugin directory under the app dir but that didnt help. Whats needed..?
While Qt/QML is sweet, building the windows deployment package is a real pain in the arse :o
- Matti
-
It's really too cumbersome to deploy a qt/qml application on Windows.
After a lot of googling and trying now my app is working.
I am using SQLite in my project, but I am using the C++ library <QtSql/QSqlDatabase>.
I have:
exedir/sqldrivers/qsqlite.dll
exedir/platforms/qwindows.dll
exedir/QtQuick.2/...
exedir/qml/exe_name/qmlfiles.qml
exedir/icudt49.dll
exedir/icuin49.dll
exedir/icuuc49.dll
exedir/libEGL.dll
exedir/libGLESv2.dll
exedir/Qt5Core.dll
exedir/Qt5Gui.dll
exedir/Qt5Network.dll
exedir/Qt5Qml.dll
exedir/Qt5Quick.dll
exedir/Qt5Sql.dll
exedir/Qt5V8.dll
exedir/D3DCompiler_43.dll
exedir/exeI am new to qt/qml, the most difficult part was to figure out where the plugin folder had to be.
Each plugin folder (sqldrivers, QtQuick.2 ...) you use have to be in the exe folder, right?
There is a way to change search path for plugins?
-
Yes theres QQmlEngine::addPluginPath() for that.
Aha so SQLite stuff works from C++ side with those, awesome, today's task will be to make it work somehow, hopefully with the existing code (from .pragma library javascript file..)
- M
-
Adding QtQuick/LocalStorage did the trick for the JS part..
My working set now is:
@
│ D3DCompiler_43.dll
│ icudt49.dll
│ icuin49.dll
│ icuuc49.dll
│ libEGL.dll
│ libGLESv2.dll
│ log.txt
│ binary.exe
│ binary.exe.embed.manifest
│ Qt5Core.dll
│ Qt5Gui.dll
│ Qt5Multimedia.dll
│ Qt5MultimediaQuick_p.dll
│ Qt5Network.dll
│ Qt5Qml.dll
│ Qt5Quick.dll
│ Qt5Sql.dll
│ Qt5V8.dll
│
├───platforms
│ qwindows.dll
│
├───QtMultimedia
│ declarative_multimedia.dll
│ plugins.qmltypes
│ qmldir
│ Video.qml
│
├───QtQuick
│ └───LocalStorage
│ plugins.qmltypes
│ qmldir
│ qmllocalstorageplugin.dll
│
├───QtQuick.2
│ plugins.qmltypes
│ qmldir
│ qtquick2plugin.dll
│
└───sqldrivers
qsqlite.dll
@I really find it intolerable that the plugin system just silently fails when it cannot load something instead of showing a message (at least in console, preferable in a MessageBox). Totally nasty to debug.
- M
-
I had a blank screen after launching my app but when i added
@
├───QtQuick
│ └───LocalStorage
│ plugins.qmltypes
│ qmldir
│ qmllocalstorageplugin.dll
│
├───QtQuick.2
│ plugins.qmltypes
│ qmldir
│ qtquick2plugin.dll
@
the problem was resolved.Thank you.
-
I'm a little confused by what the docs have under: Writing a qmltypes File found here: http://qt-project.org/doc/qt-5.0/qtqml/qtqml-modules-qmldir.html
First it says:
bq.
As such qmltypes files have no effect on the functionality of a QML module. Their only use is to allow tools such as Qt Creator to provide code completion, error checking and other functionality to users of your module.It also says:
bq.
Any module that uses plugins should also ship a type description file.So should we distribute "plugins.qmltypes" files with our app, provided that I am not interested in providing any editing capabilties to my end user on the shipped files?
-
I have included all of the files and directories mentioned in this thread as well as ALL of the plugins in the mingw directory to be extra safe, and my app also just shows a white screen; in fact I am using an included Qt Quick demo app, the Minehunt application. There is just no way I can get it to actually run correctly in an environment that does not have Qt installed already. It runs fine in Creator. This is so frustrating. No errors, not crashes, just a white screen.
-
[quote author="qttester5" date="1377757029"]I have included all of the files and directories mentioned in this thread as well as ALL of the plugins in the mingw directory to be extra safe, and my app also just shows a white screen; in fact I am using an included Qt Quick demo app, the Minehunt application. There is just no way I can get it to actually run correctly in an environment that does not have Qt installed already. It runs fine in Creator. This is so frustrating. No errors, not crashes, just a white screen.[/quote]
what is your grafic card ? have you tested it under other machines ?
-
If it was a problem with my graphics card, then why can the project run fine on the same machine, in a different VM that has Qt installed?
-
maybe the correct drivers are installed on the VM and not on the Real Machine.
-
No, I am using two identical VMs on same machine. One with and one without Qt.
-
In my App, I create a dialog QML object dynamically.
When deploying, I found that I had to add
QtQuick-->Controls
The DLL is under a further subdir, "Private"I ended up deploying the whole Controls directory for an added 6MB to the package!
Thanks to the contributors above, I would never have got here without their encouragement.
-
Seems like a headache. For me this works:
- Use Microsoft's free tool "Process Explorer" to get a list of all DLLs used while running the exe in release mode via QT Creator (they can be showed in lower pane)
- Copy all of these to the same directory as the exe, not bothering with adding any subfilders
http://technet.microsoft.com/sv-se/sysinternals/bb896653.aspx
-
See also my answer in the "other post. ":http://qt-project.org/forums/viewthread/30301/P30/#163354
That tool is interesting. Thanks for sharing. ;-)
-
Actually I was a bit optimistic there.. The stand-alone exe ran on my primary PC but only because it had Qt installed, It didn't execute on another PC.
AFAIKT Process Explorer actually does reveal all DLLs used, with path. I did some further investigations on my primary PC by adding DLLs and folders to where Qt put my exe and renaming the folders Qt wants to use until I see in Proc Expl that it uses the ones I want it to, by making use of that Qt gives me an error message when starting the exe from within it with ctrl+R (otherwise it would be hard to guess which folder structre it wants).
A few conclusions from that adventure:
- It often needs more than the DLLs, so when you have identified a DLL it wants, then copy the entire directory with the DLL (you can try to optimize later by deleting files but the non-DLL files are usually very small, and the ones ending with "d" you can skip, they are for debug mode)
- When I rename a folder that Qt wants to use, sometimes it know about an alternate folder. For one group of DLLs, Qt itself took over the DLLs and fetched them in such an alternate folder, so they were no longer under my app in Proc Expl but under Qt, and I had to reboot Qt to stop it from doing that.
The folders imageformats, platforms, QtQuick and QtQuick.2 should be in the exe's folder, together with the rest of the DLLs; eactly which, you clearly see in Proc Expl. Could add screenshot but can't see the forum supports it.
Still doesn't work though. Don't now why, but I'd suspect it's something other than DLLs missing. And I don't have more time for this right now.
PS One DLL you and everybody else seem to require is Qt5V8.dll but it doesn't exist on my PC. Perhaps from an older version?