How to release software which includes QtGraphicalEffects module and QtCharts module
-
I want to release my software which includes QtGraphicalEffects module and QtCharts module by static and dynamic compilation, but it runs on other computers only if I disable the two modules.
Here is the project file source code:
QT += qml quick widgets QT += charts CONFIG += c++11 SOURCES += main.cpp RESOURCES += qml.qrc # Additional import path used to resolve QML modules in Qt Creator's code model QML_IMPORT_PATH = # Additional import path used to resolve QML modules just for Qt Quick Designer QML_DESIGNER_IMPORT_PATH = # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target//your code here
the main file source code:
#include <QQmlApplicationEngine> #include <QApplication> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QLatin1String("qrc:/main.qml"))); return app.exec(); }
the main.qml file source code:
import QtQuick 2.5 import QtQuick.Controls 2.1 import QtQuick.Layouts 1.3 //import QtCharts 2.2 import QtGraphicalEffects 1.0 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Static Test") SwipeView { id: swipeView anchors.fill: parent currentIndex: tabBar.currentIndex Page { Button{ anchors.centerIn: parent text:"First page" layer.enabled: hovered layer.smooth: true layer.effect: DropShadow { color: activeFocus ? "#330066ff" : "#aaaaaa" verticalOffset: 3 horizontalOffset: 3 radius: 6 samples: 12 spread: 0.7 } } } Page { // ChartView { // title: "Line" // anchors.fill: parent // antialiasing: true // LineSeries { // name: "LineSeries" // XYPoint { x: 0; y: 0 } // XYPoint { x: 1.1; y: 2.1 } // XYPoint { x: 1.9; y: 3.3 } // XYPoint { x: 2.1; y: 2.1 } // XYPoint { x: 2.9; y: 4.9 } // XYPoint { x: 3.4; y: 3.0 } // XYPoint { x: 4.1; y: 3.3 } // } // } } } footer: TabBar { id: tabBar currentIndex: swipeView.currentIndex TabButton { text: qsTr("First") } TabButton { text: qsTr("Second") } } }
This problem has confused me a long time. Help me, please!
The version of Qt is qt-opensource-windows-x86-mingw530-5.8.0. And the static configure command is "configure -confirm-license -opensource -platform win32-g++ -debug-and-release -static -ltcg -prefix "C:\Qt\5.8.0_Static" -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -gui -widgets -no-qml-debug -nomake tests -nomake examples -skip qtwebkit -skip qtwebview -qt-pcre -no-compile-examples"
Update in 1st, Mar, 2017: It seems that I have found the problem failed to release my program. The module, QtChart, leads to failing to release my software. Also I have updated my code.
I find that even the official example -qml axes, cannot release and run on other computer without installing Qt. So the problem is how to release a software with QtCharts Module?
Update in 2nd, Mar, 2017: A part of my problem has been solved releasing a software contained QtCharts module by dynamical version. Qt5Charts.dll located in "C:\Qt\Qt5.8.0\5.8\mingw53_32\bin" and QtCharts folder located in "C:\Qt\Qt5.8.0\5.8\mingw53_32\qml" should be added to the folder containing the executable manually. There are still a doubt that the line, QT += charts, has been added to the qmake project file to link against the Qt Charts module, but Qt5Charts.dll and QtCharts folder need to be added manually.
Finally, I still have no idea about releasing a software with QtCharts module by static version. A message, module "QtCharts" plugin "qtchartsqml2" not found, is shown in debug window when I tried to release static version. Help me ,please.
-
Hi,
You should also add which version of Qt you are using, which platform you are targeting.
Also, don't forget the license implications of using a static build of Qt.
-
Did you check that these two modules were built also ?
One thing, I'd recommend just building the release version, that will save you time and space.
-
What exact error are you getting ?
Also how did you install your application on that other machine ? -
For dynamical releasing version, I use command line,windeployqt, to deploy my program.
For static version, the .exe file is what I wan.
In other machines which don't install Qt, interface cannot be displayed while the process of the software can be seen in Explorer.
-
If you are only giving your executable then no, you are not shipping them. Are you using windeployqt on your application before distributing it ?
-
If you are only giving your executable then no, you are not shipping them. Are you using windeployqt on your application before distributing it ?
-
The
--qmldir
option should point to your application QML sources folder.Even if static, you need to deploy the QML files.
-
The
--qmldir
option should point to your application QML sources folder.Even if static, you need to deploy the QML files.
-
Did you also run
windployqt
for your static application ? -
Your application might be static but it still needs the QML files from the corresponding Qt modules hence you should still call
windeployqt
. -
Your application might be static but it still needs the QML files from the corresponding Qt modules hence you should still call
windeployqt
. -
The same as you would on a build using the dynamic version of Qt.