2016-08-31 2 views
1

Question Qu'est-ce que cela signifie exactement pour Reconfigurer Qt et comment faire cela après l'installation d'une bibliothèque?Comment reconfigurer Qt pour détecter une bibliothèque nouvellement installée?

Contexte: Comme j'apprends à développer des applications dans Qt, je continue à courir dans un problème similaire avec quelques bibliothèques différentes, donc je pose une question plus générale parce que je pense qu'il ya un modèle ici que je Je ne comprends pas. Cependant, je donne un exemple particulier:

Je souhaite utiliser une vue de caméra USB dans mon application. J'ai import QtMultimedia 5.0 dans mon fichier qml et créé un widget de caméra basé sur un exemple de Qt-Creator. Quand je vais exécuter l'application, je vois l'erreur suivante dans la sortie de l'application:

[WARN | default] defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera" [:0] [WARN | default] defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" [:0] Et la vue de la caméra ne fonctionne pas (écran noir). Lorsque je google cette erreur, je vois beaucoup de thread qui suggèrent d'installer une bibliothèque, puis reconfigurer Qt, par exemple comme cela a été suggéré dans this bug report.

J'ai deux machines de développement différentes, une avec une installation binaire de Qt et Qt Creator et sur l'autre je construis Qt à partir de la source.

Répondre

2

Reconfigurer Qt implique de reconstruire Qt, puisque la configuration est la première étape de la construction de Qt. Qt est conçu pour que vous puissiez (et en général!) Avoir plusieurs versions installées en parallèle sur la même machine, dans différents dossiers d'installation. Ils seront tous construits à partir de la même source. Par exemple. (Sur Unix), après avoir probablement installé les paquets de développement pour GStreamer, vous auriez à construire comme suit:

cd ~ 
mkdir Qt 
wget https://download.qt.io/official_releases/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.xz 
tar -xf qt-everywhere-opensource-src-5.7.0.tar.xz 

Chaque configuration est construit dans son propre jeu de construction/dossiers d'installation:

mkdir 5.7.0-shared-build 
mkdir 5.7.0-shared 
cd 5.7.0-shared-build 
../qt-everywhere-opensource-src-5.7.0/configure -prefix ../5.7.0-shared \ 
    -opensource -confirm-license -debug-and-release -gstreamer 
gmake -j8 && gmake -j8 install && echo OK 
cd .. 

mkdir 5.7.0-static-build 
mkdir 5.7.0-static 
cd 5.7.0-static-build 
../qt-everywhere-opensource-src-5.7.0/configure -prefix ../5.7.0-static \ 
    -opensource -confirm-license -debug-and-release -static -gstreamer 
gmake -j8 && gmake -j8 install && echo OK 
cd .. 

La valeur de l'argument -j de gmake doit être définie sur le nombre de cœurs de processeur logique sur votre machine.

+0

Merci pour votre réponse, cela le rend beaucoup plus clair. Est-ce que reconfigurer qt lorsqu'il est installé à partir de binaire signifie le désinstaller et le réinstaller? – Aras

+1

@Aras Il n'est pas nécessaire de désinstaller quoi que ce soit. Le Qt installé à partir du binaire restera, vous ne l'utiliserez tout simplement pas lors de la construction de votre projet particulier. Et réinstaller n'a aucun sens: vous devez le ** construire **, pas seulement installer un binaire pour la deuxième fois. Il est parfaitement normal d'avoir plusieurs installations Qt coexistant à tout moment. J'ai parfois une douzaine de builds. J'enlève les obsolètes quand je manque d'espace, d'habitude :) –

+0

ok je vois. Je pense qu'il y a une faute de frappe dans le code ci-dessus. Vous vouliez dire 'qmake' pas' gmake', n'est-ce pas? – Aras

1

Il semble que vous ayez besoin d'un plugin Qt pour la webcam et le lecteur multimédia. L'application Qt ne peut pas trouver ces plugins (notez, ils sont spécifiquement compilés pour une utilisation avec Qt et avec une version spécifique de Qt).

Dans l'intervalle QT C++, je voudrais utiliser la fonction QCoreApplication :: addLibraryPath (const QString &), documenté ici: http://doc.qt.io/qt-5/qcoreapplication.html#addLibraryPath

Je ne dirais pas ce qui précède une "réponse", mais plutôt comme celles-ci sont des indices qui pourraient vous aider à chercher la réponse que vous devez trouver.