IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Compléter un chemin d'accès qrc:/ avec un fichier local


Sujet :

Qt

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Compléter un chemin d'accès qrc:/ avec un fichier local
    à tous,

    Dans un de mes projets je cherche à afficher dans un WebEngineView une page PDF. Parmi les trois solutions que j'ai trouvées actuellement, la plus aboutie (si j'arrive à la faire fonctionner correctement) est celle qui utilise le fichier viewer.html de pdf.js

    En gros, j'ai mis en ressource tout ce que contient le dossier pdfjs (je ferai le tri nécessaire par la suite )

    Il ne me reste plus qu'à utiliser mon WebEngineView ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WebEngineView {
        anchors.fill: parent
        url: "qrc:/pdfjs/web/viewer.html"
    }
    Ce qui aura pour effet d'afficher le pdf de test dans mon WebEngineView. Nickel, enfin presque !!!

    L'idée est de pouvoir charger dynamiquement des fichiers pdf (fiches techniques de machines dont les url locales sont stockées par l'utilisateur dans une BDD), et c'est là que ça coince. D'après la doc de pdf.js il suffirait de modifier l'url de mon webview ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url: "qrc:/pdfjs/web/viewer.html?file=/chemin/vers/mon/pdf"
    sauf que là, comme le pdf n'est pas dans les ressources il n'est pas trouvé.

    J'ai fait le test avec le pdf de test (voir ci-dessus) : si je le supprime des ressources j'ai un message d'erreur dans le viewer de pdf.js et le pdf ne s'affiche pas. Je le redéclare dans mon qrc et ça refonctionne.

    Auriez-vous une idée pour me sortir de cette situation, car moi je tourne en rond là

    Info importante : le viewer de pdf.js permet d'aller chercher manuellement & localement un fichier : là ça fonctionne bien, mais ce n'est pas ce que je veux faire.

    D'avance merci à tous.


    J


    PS : si vous avez une meilleure idée pour afficher un pdf ou si vous avez des conseils liés à mon premier topic (voir début de celui-ci) : n'hésitez surtout pas
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Sauf erreur de ma part, le fichier qrc ne permet qu'une seule chose : ajouter au binaire de l'application les fichiers indiqués au moment de la compilation.

    Si je ne me trompe pas lourdement sur ce point,cela signifie que, une fois que ton application est compilée, tu ne peux plus modifier les fichiers qui sont utilisés par ton qrc.

    Par contre, tu peux normalement utiliser le type BLOB (ou autre du même style) dans une base de données. Ce type particulier permet de représenter des données binaires de grandes tailles, ce qui est -- justement (la vie n'est-elle pas belle ) -- le cas des fichiers pdf et autres formats d'image classiques.

    Tu peux donc très facilement placer tes fichiers directement dans ta base de données et les récupérer à l'aide d'une requete tout ce qu'il y a de plus classique. Et, pour autant que je me souvienne (ca fait longtemps que je n'ai plus vraiment utilisé cette technique), il est relativement facile de provoquer l'affichage du pdf récupéré
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    et tout d'abord, merci pour ta réponse.


    En fait ce que je veux ce n'est pas modifier mon fichier présent dans qrc mais lui "passer" en argument le fichier à ouvrir. Selon moi ça doit être possible puisqu'une fois l'application lancée j'ai la possibilité d'ouvrir n'importe quel PDF local en utilisant l'interface du viewer fourni avec pdf.js (voir ci-dessous)
    Nom : screen3.png
Affichages : 462
Taille : 196,2 Ko


    J'avais un peu penser à utiliser le type BLOB, mais je n'ai pas poussé plus que cela mes recherches. Je suppose qu'il faut envisager ensuite l'utilisation d'un QByteArray ou autre chose du genre ?

    Tu dis que tu n'utilises plus cette façon de faire ... tu utilises laquelle maintenant ???

    Merci pour ton aide.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Sauf erreur (ce qui peut toujours arriver), tu as, en gros, trois solutions :
    1. Soit tu utilises qrc, mais, comme je te l'ai dit, les fichiers indiqués son "joints" à l'application à la compilation qui se crée un "dossier temporaire" pour pouvoir y accéder
    2. soit tu définis toi-même un dossier local dans lequel tu placeras les fichiers qui t'intéressent (sous linux, cela peut être /usr/shar/ton_application, par exemple); mais attention aux droits d'accès et aux spécificités de la plateforme en termes de filesystem et d'organisation des dossiers (surtout si tu veux faire quelque chose de portable)
    3. soit tu utilises le BLOB de ta base de données

    Et puis, j'ai dit que je n'ai plus utilisé la technique de la base de données depuis longtemps, mais non pas parce que je l'ai remplacée par quelque chose, mais bien parce que je n'ai pas eu besoin de l'utiliser ces temps-ci... La nuance est subtile

    EDIT Ceci dit, je reste persuadé que la technique "qrc" n'est pas adaptée à ton problème : sauf erreur de ma part, cette technique permet essentiellement de fournir des fichiers de ressources (icones, configuration de base, ...) pas pour fournir des fichiers en pagaille pour permettre leur utilisation ultérieure

    Enfin, je suis pas très pote avec QWebEngine (on a tous nos limites quelque part )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Je te remercie encore pour ton aide... je suis resté trop focalisé sur les qrc et le "tout fournir dans l'exécutable".

    Tu as bien fait d'insister. Finalement je pense que je vais utiliser un fichier de configuration avec lequel l'utilisateur pour renseigner le path du viewer de pdf.js (voire en fournir un avec mon exécutable préconfiguré) et le tour sera joué.

    Merci à toi.

    ++


    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/08/2012, 12h29
  2. Réponses: 7
    Dernier message: 09/12/2008, 00h28
  3. Réponses: 1
    Dernier message: 19/02/2008, 09h03
  4. Popup avec un fichier local
    Par Jackspid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/03/2006, 15h27
  5. probleme de chemin d'acces avec aspSmartUpload
    Par julio_097 dans le forum ASP
    Réponses: 2
    Dernier message: 22/08/2005, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo