ressource Dateien, wo und wie werden diese gespeichert?
-
Hallo zusammen,
ich möchte eine Ressource Datei für Icons zu einem Projekt hinzufügen.
Wenn ich mir Videos anschaue, wie das gemacht wird, wird dann werden immer Dateien hinzugefügt, die noch nicht im Projekt Ordner sich befinden und Qt fragt dann, ob die Daten kopiert werden sollen. Das wird mit Kopien bestätigt und gut ist.
ich muss jedoch selber den Projektordner beim Kopien suchen und meine Daten dort hinein speichern, warum ist das so?
Mache ich was änderst wie die anderen oder liegt das eventuell an der Version?
Oder haben die was änderst eingestellt wie bei mir?Und wie strukturiert Ihr Euren Projekt dann?
Projektordner
- mein.cpp
- mainwindow.cpp
- usw ...
Projektordner/icon - icon1.png
-icon2.png
-etc....
oder kommen die Icos mit in den Hauptordner?
Denn der Unterordner wird im Projektbaum ja auch noch mal mit aufgeführt.
Ich bin etwas verwert, was das mit den Ressource-Daten auf sich hat.
Gruß Mücke
-
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Wenn ich mir Videos anschaue, wie das gemacht wird, wird dann werden immer Dateien hinzugefügt, die noch nicht im Projekt Ordner sich befinden und Qt fragt dann, ob die Daten kopiert werden sollen. Das wird mit Kopien bestätigt und gut ist.
Glaub das liegt einfach an dem Datei-Explorer. In dem Video ist der Projekt-Pfad schon geöffnet.
In dem Fenster wo nach "Kopieren" gefragt wird, einfach nochmal in den Projektordner navigieren (evtl. ensprechender Unterordner) und dann über den Dialog die Datei dahin kopieren.ich muss jedoch selber den Projektordner beim Kopien suchen und meine Daten dort hinein speichern, warum ist das so?
Mache ich was änderst wie die anderen oder liegt das eventuell an der Version?
Oder haben die was änderst eingestellt wie bei mir?Die Ressourcen kann man von jedem beliebigen Ort auswählen, aber damit sie dann wirklich ins Projekt integriert werden können, sollten sie im Projekt-Ordner liegen. Daher auch das Kopieren.
Die Ressource Datei managed sozusagen deine Projektressourcen und gibt die Pfade an, wo danach gesucht werden soll.Und wie strukturiert Ihr Euren Projekt dann?
Idealerweise macht man dann im Projektorder einen Unterorder "res" für Ressourcen, den man dann ja theoretisch weiter beliebig unterteilen kann.
z.B.- main.cpp
- bla.h
- bla.cpp
- /res
- ico/
- button_on.ico
- button_off.ico
- img/
- welcome_screen.png
- logo.png
- ico/
So wirft man nicht alle Ressourcen (müssen ja nicht nur Bilder sein, Ressource kann jede Datei sein) in einen Ordner, wo sich dann niemand mehr zurecht findet.
Man sollte aber bedenken, je mehr Ressourcen, desto größer wird das Projekt, weil die ja alle "mitgeliefert" werden müssen, wenn man die Binary baut, damit die selben Bilder und Dateien auch auf anderen Rechnern verfügbar sind, auf denen das Projekt läuft. -
OK, wenn ich dich richtig verstehe, ist es normal und OK das ich dann angeben muss, wo die Daten hinkopiert werden sollen. Das beruhigt mich schon mal etwas. Dachte schon, ich habe irgendwo was zerschossen.
@Pl45m4 said in ressource Dateien, wo und wie werden diese gespeichert?:
Idealerweise macht man dann im Projektorder einen Unterorder "res" für Ressourcen, den man dann ja theoretisch weiter beliebig unterteilen kann.
Ok das kann ich nachvollziehen und finde ich auch gut, dachte das macht der Ressourcen Manager von Qt selber (je nach Präfix).
Angenommen, ich habe die Ordner Struktur wie du sie erstellt hast.
Dann würdest du für die "ico" ja ein Präfix vergeben.
Bei mir sieht das dann wie auf dem Bild in Beitrag 1 aus.
Denn der Ordner dem Icon wird auch noch mal separat angezeigt.
Oder liegt das am Pfad, den ich am Anfang angegeben habe, wo er die Daten findet?
(das teste ich später, wenn ich am Rechner bin)@Pl45m4 said in ressource Dateien, wo und wie werden diese gespeichert?:
Man sollte aber bedenken, je mehr Ressourcen, desto größer wird das Projekt, weil die ja alle "mitgeliefert" werden müssen, wenn man die Binary baut, damit die selben Bilder und Dateien auch auf anderen Rechnern verfügbar sind, auf denen das Projekt läuft.
Da kann ich nicht ganz folgen.
Wie meinst du das?
Nicht alles auslagern, sondern eher im Code selbst machen?Als Ressourcen fällt mir jetzt so spontan ein.
- Icons
- Logo
- Video
- Handbuch
- INI Dateien
dann wird es schon eng mit meiner Vorstellung.
Am liebsten würde ich die Icons als CODE einbinden, wie eine SVG, dann gibt es das Icon gar nicht als Datei, sondern als Code teil im Programm selbst.
Na ja, das ist jedoch noch ein Paar viele Hausnummern zu hoch für mich.Ich tue mich mit dem aktuellen noch sehr schwer, und muss ständig neu ausprobieren und testen und überlegen.
Bis ich meiner Vorstellung von meinem Programm mal anfangen kann, dauert es noch ein ganze weile, habe ich den Eindruck.
-
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Angenommen, ich habe die Ordner Struktur wie du sie erstellt hast.
Dann würdest du für die "ico" ja ein Präfix vergeben.
Bei mir sieht das dann wie auf dem Bild in Beitrag 1 aus.
Denn der Ordner dem Icon wird auch noch mal separat angezeigt.
Oder liegt das am Pfad, den ich am Anfang angegeben habe, wo er die Daten findet?
(das teste ich später, wenn ich am Rechner bin)Präfix ist, soweit ich weiß, eher eine logische Gliederung und nicht, der Ort wie die Dateien wirklich in den Ressourcen liegen.
Du kannst einen Ordner/Res
haben, aber daraus dann verschiedene Präfixe erstellen, die dann durch die qrc Datei im QtCreator organisiert werden.Video
HandbuchGenau DIE eher nicht. Die sollten eher zusätzlich zu der Binary (dem ausführbaren Programm) mitgeliefert werden. In einem separaten Verzeichnis oder so.
Dateien, die dem Qt Ressource System hinzugefügt werden, werden später IN die Binary (auf Windows, die*.exe
integriert).
d.h. du siehste sie nachher nicht mehr und sie können auch nicht mehr geändert werden
Das meinte ich auch, dass dein Programm dann immer größer wird. Klar, wenn du ein 20MB Video oder so als Ressource hinzufügst, steigt die Größe deiner EXE auch um ca. 20MB (abzüglich evtl. Kompression etc.).
Hängt davon ab, was das für ein Video ist und wie groß die EXE werden darf/soll.Macht bei Icons usw. Sinn, daher können exe's auch ihr eigenes Logo haben, statt diesem Standard Windows Bild für ausführbare Programme (dieses Bildchen mit dem Programm-Fenster), welches du aktuell auch sehen solltest, wenn du bei Programmen, egal ob eigene oder irgendwas Fremdes, kein Icon hast.
INI Dateien
Bei Konfigurationsdateien macht es auch nur Sinn, wenn sie nicht mehr geändert werden sollen (siehe oben).
Alles, was du zu Ressourcen hinzufügst, ist Read-only (also nicht schreibbar). Du oder jeder andere Nutzer könnte also keine Änderungen an der Konfig/INI Datei vornehmen.Edit:
Um 100% korrekt zu sein, es gibt wohl die Möglichkeit interne und externe Ressourcen zu erstellen, siehe hier. Aber auch diese können nicht geändert werden
Hier steht auch was zur Kompression wenn Dateien in der binary integriert werden. Der Default-Wert sind 70%. -
@Pl45m4 said in ressource Dateien, wo und wie werden diese gespeichert?:
Präfix ist, soweit ich weiß, eher eine logische Gliederung und nicht, der Ort wie die Dateien wirklich in den Ressourcen liegen.
Du kannst einen Ordner /Res haben, aber daraus dann verschiedene Präfixe erstellen, die dann durch die qrc Datei im QtCreator organisiert werden.Ah ok, ich glaube so langsam verstehe ich es. Bin leider Gesten nicht mehr an den PC gekommen, :-( versuche heute Abend weiterzumachen.
@Pl45m4 said in ressource Dateien, wo und wie werden diese gespeichert?:
Genau DIE eher nicht. Die sollten eher zusätzlich zu der Binary (dem ausführbaren Programm) mitgeliefert werden. In einem separaten Verzeichnis oder so.
Dateien, die dem Qt Ressource System hinzugefügt werden, werden später IN die Binary (auf Windows, die *.exe integriert).
d.h. du siehste sie nachher nicht mehr und sie können auch nicht mehr geändert werdenAH Ok, diese Ressourcen sind später Teil der *EXE Datei.
Ja dann ist es besser das Handbuch Benutzer Videos nicht darin einzubinden.Jetzt verstehe ich auch, was du mit "IN die Binary" meinst, das war mir noch nicht so klar.
@Pl45m4 said in ressource Dateien, wo und wie werden diese gespeichert?:
Bei Konfigurationsdateien macht es auch nur Sinn,
Unter den Umständen, dass dies fest eingebunden und nicht veränderbar ist, gebe ich dir recht.
Mit Konfigurations-Dateien und Einstellungsdateien muss ich mich noch befassen.
Denn ich möchte auch Farbpaletten einbauen, doch diese Daten sollen dann auch Bearbeitung fähig sein. Doch das ist ein anderes Thema, so weit bin ich noch nicht.COol, danke für den Link.
Du schreibst jedoch auch externe Daten können nicht verändert werden.
Wie muss ich den Satz dann richtig verstehen aus deinem Link?https://doc.qt.io/qt-6.5/resources.html#external-resource-files said in [Externe Ressourcendateien]
Eine Alternative zum Einbetten der Ressourcendateien in die Binärdatei besteht darin, sie separat zu speichern .rccDatei. rccermöglicht dies mit dem -binaryMöglichkeit. So ein .rccDie Datei muss dann zur Laufzeit mit geladen werden QResource.
Ich hätte das so interpretiert zu Laufzeiten, also dann, wenn die EXE ausgeführt wird, müssen die daten geladen werden und werden eingebunden? Sprich was vorher verändert wurde, wird teil des Programmes?
Bringe ich da was ducheinander?Gruß Mücke
-
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Sprich was vorher verändert wurde, wird teil des Programmes?
Klar. Aber du kannst diese externen Resourcedateien nicht so einfach editieren, sprich deine Applikation lädt diese Resourcedateien verändert diese aber nicht.
-
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Du schreibst jedoch auch externe Daten können nicht verändert werden.
Ich wusste bisher auch noch nichts von externen Ressourcen, habe aber mal schnell nachgelesen. "Externe Ressourcen" bedeutet, dass eine oder mehrere Dateien in eine Qt Ressourcen Datei gepackt werden. Dabei handelt es sich um eine binäre Datei, die intern ein eigenes Dateisystem hat. In dem Fall kann tatsächlich nur von dort gelesen werden. Diese Pfade beginnen immer mit
:
(z.B.:/icons/app_icon.png
).Mit QFile kannst du allerdings ganz normal irgendwelche Dateien lesen und schreiben. Mit QStandardPaths kannst du auch herausfinden, wo normalerweise z.B. Konfigurationsdateien abgelegt werden sollten, sodass sie einheitlich in jedem Betriebssystem gefunden werden. QSettings erlaubt dir auch Konfigurationen im INI-Format zu speichern (wenn du allerdings die Default-QSettings verwendest, speichert das unter Windows in die Registry!).
Möchtest du eine separate Konfigurationsdatei mit deinem Programm ausliefern, so bist du schnell bei einem Installer. Der würde sich dann darum kümmern, dass nicht nur die .exe sondern auch die Konfigurationsdatei installiert wird. Alternativ kannst du auch beim ersten Start (bzw. immer wenn die Konfigurationsdatei nicht gefunden werden kann) eine Konfigurationsdatei anlegen. Dann ersparst du dir den Installer.
-
Ok, dann hatte ich die Ressourcendateien etwas falsch verstanden. Jetzt ist das Bild deutlich klarer. Danke! für die Unterstützung.
@SimonSchroeder
Das ist sehr interessant, und bringt mich gleich wieder zu weiteren Fragen mit den Konfigurationsdateien & INI Daten.
Doch das schiebe ich vorerst, bis ich mit dem, was ich gerade mache, so weit bin.Dann kann ich die nächste Baustelle eröffnen :-)
Danke für die den Kurzen einblick.
-
-
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Wie kann ich den "Ressource Browser" einblenden bei mir?
Der im QtCreator integrierte Designer hat das aus irgendwelchen Gründen nicht (mehr).
In dem Video nutzen die einen stand-alone QtDesigner der, soweit ich weiß, nicht mehr offiziell unterstützt wird, sondern vor Jahren in irgendeiner Version mal entstanden ist. -
@Muecke82 said in ressource Dateien, wo und wie werden diese gespeichert?:
Ich bin immer noch am Nachbauen ;-).
Manchmal ist der echt schnell im Video und ich muss 20 x schauen, wo der mit der Maus hin ist und geklickt hat.Wichtig wäre, dass du auch verstehst was er da tut und was das für einen Effekt hat.
Dann wird es dir später einfacher fallen Modifikationen vorzunehmen und eigene Sachen zu bauen, was ja dein Ziel ist, denke ich. Gibt ja nicht zu allem was einem so einfällt für sein Programm eine Schritt-für-Schritt Anleitung bei Youtube :D -
@Pl45m4 :
Oh ja, da hast du recht, und bis jetzt verstehe ich noch nicht immer, warum etwas gemacht wird, also spiele ich noch viel herum.Bisher habe ich es geschafft, die beiden Menüs aufzubauen und das Hamburger-Icon so zu verknüpfen, dass man zwischen den beiden Menüs hin und her springen kann.
Dass in beiden Menüs der gleiche Menüpunkt aktiv ist, egal in welchem man ihn drückt.Was ich nicht hinbekommen habe, ist, dass nach dem Kompilieren nur eines der beiden Menüs angezeigt wird, ich habe den Eindruck, dass dies über den Code gemacht werden muss und nicht über den Layouteditor.
Wenn ich das hinbekommen habe, möchte ich das Menü ein paar mal umgestalten und das Layout ändern (Farben, Formen, oder auch das ich nur einen Button habe und ein Menü erscheint, das vorher nicht sichtbar war. etc.)
Wenn ich das hinbekommen habe, werde ich mich um den nächsten Teil des Videos kümmern.Aber so wie es jetzt läuft, dauert das noch 2 bis 3 Wochen.