2012-11-26 9 views
12

Napisałem aplikację Qt Quick Desktop w języku C++ qnd Qt Creator (QML) na Windows7. Teraz Muszę go wdrożyć i muszę ukryć pliki qml i obrazy (czyli: umieścić je w zasobach itp.).Jak korzystać z qrc w aplikacjach C++ i QML?

Przeczytałem, że jest to świetny sposób na zrobienie tego. pliki qrc. Czytam dokumentację na temat tych plików i stworzył jedną dla mojej aplikacji, która wygląda następująco:

<RCC> 
<qresource prefix="/"> 
    <file>qml/GenericHostApplicationQML/myMain.qml</file> 
    <file>qml/GenericHostApplicationQML/content/PressAndHoldButton.qml</file> 
    <file>qml/GenericHostApplicationQML/content/TextButton.qml</file> 
    <file>qml/GenericHostApplicationQML/content/pics/advancedsettings.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/cnruninstall.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/dialog_cancel.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/folder_explore.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/gnome_session_switch.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/mail2_send.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/Picture1.png</file> 
    <file>qml/GenericHostApplicationQML/content/pics/Picture2.png</file> 
</qresource> 

W main.cpp, mam ładowania plików Main.qml jak:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QDeclarativeView view; 
    view.setSource(QUrl::fromLocalFile("qml/GenericHostApplicationQML/myMain.qml")); 
    view.show(); 
    return app.exec(); 
} 

próbowałem odczytać pliku myMain.qml z Resources.qrc jak:

view.setSource(QUrl(":/qml/GenericHostApplicationQML/myMain.qml"));//I added the ":/" 

ale mam Dostałem ten błąd:

file:///qml/GenericHostApplicationQML/myMain.qml: File not found 

i kiedy próbowałem to:

Dostaję to:

file:///C:/Users/ayalafre/Desktop/ghaQML/GenericHostApplicationQML-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Release/:/qml/GenericHostApplicationQML/myMain.qml: File not found 

Wydaje się, że mój Qt nie wie, co zrobić z : ": /".

muszę użyć pliku .qrc w:

  • Ładowanie pliku myMain.qml
  • Korzystanie import do QML pliki myMain.qml
  • Używanie obrazów w moich plikach QML

Czy możesz mi wyjaśnić, co jest nie tak? i co muszę zrobić, aby korzystać z .qrc zarówno w językach C++ jak i qml?

dziękuję :)

+0

Jestem prawie pewien, że nie ma sposobu, aby faktycznie ukryć kod QML, nawet jeśli korzystasz z pliku zasobów, ten kod jest nadal widoczny dla anyo ne, który sprawdza twój plik wykonywalny, tzn. nie jest skompilowany, zaszyfrowany lub przekształcony w kod binarny w jakikolwiek sposób. – johnbakers

Odpowiedz

18

Czy spróbuj tego:

view.setSource(QUrl("qrc:/qml/GenericHostApplicationQML/myMain.qml")); 

Kiedy to zrobić:

QUrl(":/qml/GenericHostApplicationQML/myMain.qml"); 

ścieżka jest „file: /// QML/GenericHostApplicationQML/myMain.qml "

+0

Oh Tnx, działa !!! i czy powinnaś mnie poprowadzić, proszę, jak go użyć w źródle obrazu qml oraz w importowaniu qml? Dzięki! – user1835297

+0

jakikolwiek pomysł, jak to zrobić? – user1835297

+0

chcesz odczytywać bezpośrednio plik qml z lokalnego pliku źródłowego, a nie z pliku zasobów? – Kirween