2014-11-19 8 views
9

Se ho un sacco di risorse (immagini, caratteri, ecc.) In diverse cartelle sotto il mio file qml.qrc, c'è un modo per organizzarlo all'interno di Qt Creator?Come posso organizzare i file nella cartella qml.qrc in Qt Creator?

Per esempio, se ho il seguente nel mio file qml.qrc:

<RCC> 
    <qresource prefix="/"> 
     <file>main.qml</file> 
     <file>pages/MainPage.qml</file> 
     <file>pages/NewContactPage.qml</file> 
     <file>images/plus.png</file> 
     <file>images/minus.png</file> 
     <file>images/exit.png</file> 
    </qresource> 
</RCC> 

verrà mostrata come una lunga lista di Qt Creator, in questo modo:

Resources 
    qml.qrc 
     /
      main.qml 
      pages/MainPage.qml 
      pages/NewContactPage.qml 
      images/plus.png 
      images/minus.png 
      images/exit.png 

Dal momento che questo la lista può diventare molto lunga per tutta la durata del progetto, sarebbe bello se questi fossero organizzati meglio e divisi in cartelle come se fossero nella mia directory. Qualche idea?

+2

Definisci prefissi, un prefisso per ogni subdir che hai. Qui si usa semplicemente '/' come prefisso. Usa invece '/ images','/pages' e così via. In questo modo le diverse cartelle verranno visualizzate come sottodirectory del file di risorse, all'interno di 'QtCreator'. – BaCaRoZzo

+1

Perfetto! Questo è esattamente ciò di cui avevo bisogno. Grazie! – rderosia

risposta

2

Dalla documentazione Qt: The Qt Resource System

Per impostazione predefinita, le risorse sono accessibili nell'applicazione con lo stesso nome del file in quanto hanno nell'albero dei sorgenti, con un:/prefisso, oppure da un URL con un schema di qrc.

E 'anche possibile specificare un prefisso di percorso per tutti i file nel file .qrc mediante l'attributo prefix del tag qresource:

questo esempio mostra come farlo:

<RCC> 
    <qresource prefix="/pages"> 
     <file >pages/MainPage.qml</file> 
    </qresource> 
    <qresource prefix="/images"> 
     <file >images/plus.png</file> 
    </qresource> 
</RCC> 
+2

Questo è utile per 1 livello di organizzazione delle cartelle, MA - Cosa succede se voglio che il mio progetto QT mostri una cartella all'interno di una cartella all'interno di una cartella, come fare? cercato su google/qt sito ufficiale, non ho trovato alcuna menzione! fastidioso. – Mercury

+6

@ ali-mofrad, questo non produrrebbe percorsi come /pages/pages/MainPage.qml e /images/images/plus.png? – Zmey

+0

@Zmey: si. hai ragione. se si desidera rimuovere un livello, è sufficiente aggiungere tutti i file in una cartella e utilizzare più prefissi per separarli. –

2

altro bel modo per visualizzare i file/cartelle di progetto come appaiono sul file system:

  • Apri il tuo progetto
  • Clicca sul menu a tendina che si trova sopra il nome del progetto, come dimostrato nell'immagine qui sotto:

enter image description here

  • Fatto, ora è possibile vedere i vostri file e le cartelle come appaiono sul FS
+0

Questo ha almeno 2 i problemi. 1) Non è possibile visualizzare diversi progetti aperti nello stesso albero. 2) per aggiungere, rimuovere o rinominare un file in qrc, è necessario passare nuovamente alla vista "Progetti". –

2

Se si desidera utilizzare i file QRC ma non amano i percorsi come "immagini/icone/immagini/icone/icon.png /" uso alias come descritto here

<qresource prefix="/images"> 
    <file alias="cut.png">images/cut.png</file> 
</qresource> 

Con alias è possibile utilizzare il file di scrivendo ordinatamente /images/cut-img.png invece di /images/images/cut.png

3

Ho appena scoperto un modo fantastico per farlo. La cosa strana è che nessun altro l'ha suggerito, quando è così banale. Forse non ha funzionato nelle vecchie versioni di Qt/Qt Creator, ma ora lo fa.

Eccolo:

<RCC> 
    <qresource prefix="/"> 
     <file>main.qml</file> 
     <file>test/test.txt</file> 
    </qresource> 
</RCC> 

Il test dir deve esistere e deve contenere test.txt.

Nessuna necessità di creare tag separati <qresource> con prefissi diversi.Non sono necessari gli attributi alias.

I file sono organizzati in modo pulito nel filesystem e nel progetto explorer e è possibile accedervi dal codice con percorsi puliti come :/test/test.txt.

screenshot

(Questo screenshot di un progetto che ha alcuni file aggiuntivi, come pure - ignorare quelli)

Bonus: È possibile fare clic destro sulla cartella "test" nel progetto explorer in Qt Creatore e scegliere "Aggiungi nuovo ...", questo fa mettere il file appena creato nel posto giusto nel filesystem. Sfortunatamente non appare nella sottostruttura qrc nel project explorer, solo in una sottostruttura "Altri file" separata. È necessario fare clic con il tasto destro su "qrc.qml" nel project explorer e scegliere "Aggiungi file esistenti" per far apparire il file nella sottostruttura qrc come dovrebbe. Quindi è un po 'buggato/disordinato ma quando impari a usarlo, è praticabile.

Bonus 2: È possibile importare (aggiungere) un file/dir esistente (che risiedono in qualsiasi (sotto) sub-dir del file QRC) e la sintassi XML destra verrà generato, con conseguente diritto struttura ad albero nell'Explorer di progetto.

Quello che penso non funziona bene:

  • Creazione di un file da Qt Creator da File -> New file or project (o Ctrl-N). Questo non ti permette di mettere il file in una directory arbitraria nel filesystem, solo nella directory del progetto root.
  • I file che hai inserito nelle sottodivisioni aren't included nella ricerca dell'intero progetto di Qt Creator (Ctrl+Shift+F).

Modifica: Ho appena notato che l'OP sta facendo esattamente ciò che suggerisco. In quel caso, probabilmente sta usando una versione più vecchia di Qt Creator. Il mio è 4.1.0.

0

In realtà, consiglio vivamente che le risorse non .qml vengano inserite in un file di risorse diverso, in quanto file di grandi dimensioni will gut application build times. Quello che succede è che anche una piccola modifica a un sorgente qml comporterà la ricompilazione dell'intero file di risorse. Se le risorse sono in un file di risorse diverso, esse non vengono continuamente ricompilate.

Ciò consentirà inoltre di raggiungere efficacemente l'organizzazione oltre a migliorare significativamente i tempi di costruzione.