QT Programm benötigt einen Haufen DLL-Dateien
-
Ein QPushButton::clicked() ist ja ganz niedlich, aber es enthaelt keine Parameter, die dir irgendwie von Nutzen sein koennten!
Ein clicked() ist halt ein clicked(), mehr nicht, was dann geschieht musst du schon selber wissen.Du kannst jetzt
- func() die Parameter entfernen
oder - einen parameterlosen SLOT definieren, den du an das clicked() haengst, und der func(char*, char*) selber mit bestimmten Argumenten aufruft.
Da 1) dein Interface veraendert (und wahrscheinlich auch nutzlos macht ;)) ist 2) die bessere Alternative.
- func() die Parameter entfernen
-
Ich habe jetzt mit einigen Umwegen (ich weiß leider nicht, wie ich aus einer beliebigen Funktion auf mein Widget zugreifen kann - das wird in der main() erstellt) die Parameter auslesen und weiterreichen können. Bis dahin schonmal vielen Dank :).
Jetzt nochwas zum QFileDialog:
Du ahnst es vermutlich schon, aber hier nochmal im Klartext: Der Dateibrowser soll sich beim Drücken auf einen Button öffnen und der Pfad zur dort ausgewählten Datei soll dann in einem der QLineEdits angezeigt werden.
Geht das allein mit connect() etc. oder muss ich hier auch Umwege gehen?Ich habe in der QT-Dokumentation für den QFileDialog keine Slots, sondern nur Signale gefunden.
-
Die prinzipielle Verwendung des QFileDialog sollte aus der Doku hervorgehen.
Viele Beispiele mit Dialogen gibt es hier:
http://doc.trolltech.com/4.6/examples-dialogs.htmlIch denke du hast noch prinzipielle Verwendungsschwierigkeiten von connect und evtl. ueberhaupt dem GUI-Kram.
Schau dir in Ruhe die Examples, die Qt mitliefert an.Auf die schnelle hier noch die Loesung:
Connecte das clicked()-SIGNAL deines fileOpenButtons auf einen eigenen SLOT deines Widgets, in dem der Button liegt. In diesem Slot oeffnest du wie in der Doku zu QFileDialog beschrieben einen Dialog (am einfachsten du verwendest eine der static-Methoden). Du solltest in dem Widget Zugriff auf das LineEdit haben, das ja hoffentlich im selben Widget liegt, also sollte ein setzen des lineedit-Text kein Problem darstellen.Wenn doch solltest du nochmal ganz langsam die Beispiele durcharbeiten.
-
Danke für die Hilfe - auf die Idee, die Funktion einfach als Slot zum Widget zuzufügen, bin ich gar nicht gekommen. Soweit ich das jetzt sehe, sind meine beiden Fragen geklärt und ich kann mich endlich ans (eigentliche) Programmieren machen ;).
Der Link, den du da oben eingefügt hast, ging eben nicht. Aber das Tutorial habe ich auch schon 2 Mal durchgearbeitet (allerdings bereits vor einiger Zeit).
Ansonsten hast du Recht: Ich habe noch viele Probleme mit QT im ganzen und mit der GUI - vorher habe ich immer versucht, eine grafische Oberfläche zu umgehen, aber irgendwann geht's einfach nicht mehr ohne.
-
Stiefel2000 schrieb:
Der Link, den du da oben eingefügt hast, ging eben nicht. Aber das Tutorial habe ich auch schon 2 Mal durchgearbeitet (allerdings bereits vor einiger Zeit).
Ja, sry
Hab da wohl das "l" entfernt. Jetzt geht es.Ansonsten hast du Recht: Ich habe noch viele Probleme mit QT im ganzen und mit der GUI - vorher habe ich immer versucht, eine grafische Oberfläche zu umgehen, aber irgendwann geht's einfach nicht mehr ohne.
Ist ja kein Problem
Die Qt-Doku mit ihren ganzen Beispielen laesst eigentlich keine Fragen offen.
Schau einfach genau hin, wie die die Klassen zusammenbasteln, bevor du dich auf die ganzen Feinheiten stuerzt. Das wird dann mit der Zeit schon besser, wenn du ein Gefuehl fuer die Materie bekommst!
-
Neues Problem:
Ich bin jetzt mit meinem Programm fertig, musste jedoch ziemlich erschreckt feststellen, dass man zum Ausführen meiner 120KB-exe knapp 15 MB an DLL-Dateien benötigt. Diese wären: libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dllZum Kompilieren habe ich auf die Schnelle den QTCreator genommen, sonst wäre es eher eclipse.
Kann ich irgendetwas tun, um die .dll-Dateien ein wenig abzuspecken? Vor allem die ersten beiden .dlls (die allerdings nur wenige KB groß sind) sind mir ein Dorn im Auge, weil ich die noch nie gebraucht habe. Aber natürlich stören auch die anderen beiden, da sie mein Programm extrem aufblähen.EDIT: Ich habe jetzt alles mögliche neu installiert (mingw, eclipse und das QT-Framework) und benötige zumindest nur noch die beiden QT-Dlls. Die bekomme ich allerdings nicht weg. Muss ich irgendetwas beachten, damit ich statisch darauf verlinken kann? Gibt es abgespeckte "User-Versionen" dieser Dlls?
Ich hatte eigentlich gehofft, dass das Ersetzen des QT-SDKs durch das Framework helfen würde, aber das war leider nicht der Fall :(.
Weiß jemand Rat?EDIT2: Ich habe durch Zufall gerade auf den ganz in der Nähe befindelichen "doofes qmake"-Thread geklickt und entdeckt, dass dort jemand das gleiche Problem hat(te) - momentan probiere ich gerade die dortige Lösung aus. Evt. ist also keine Hilfe mehr nötig :).
-
Ich verstehe nicht so ganz was die OP in diesen und dem anderen Thread gegen dynamische DLLs haben. Ein großes Framework bringt automatisch große DLLs mit. Und fast alle Programme die mit Qt geschrieben sind werden auch _mit_ Dlls installiert. Die paar 10MB die dabei maximal draufgehen, spielen bei > 1.000.000 MB (>1TB) Festplatten nun wirklich keine Rolle. Abgesehen von den Qt Dlls braucht man dann noch die Compilerspezifischen DLLs, das sind dann die mingwm10.dll und die andere mit libgcc im Namen sowie dlls von weiteren genutzen Bibliotheken.
Wirklich unangenem sind die Compiler spezifischen Dlls nur bei Visual Studio, auch bekannt als Manifest-Hölle. Dafür braucht man da keine mingwm10 und libgcc...
-
Im Prinzip hast du Recht. Allerdings habe ich in DIESEM Fall QT nur genutzt, weil ich eine grafische Oberfläche für ein bereits bestehendes Programm haben wollte. Bisher war das Programm plattformunabhängig und das wollte ich durch Nutzen von QT gern beibehalten. Allerdings war das Programm bisher auch nur knapp 100KB groß und das Beilegen von ~10MB Dll-Dateien ist da einfach unangebracht. Bei einem größeren Projekt würde ich es zu Zwecken der Durchsichtigkeit vermutlich auch begrüßen, wenn dynamisch verlinkte Dlls beiliegen, aber hier nicht.
-
Also wenns Statisch sein soll, und einfach dann würde ich bei kleineren Programmen eher wxWidgets + wxPack nehmen, dass hat auch alles was ein einfaches GUI Programm braucht.
Die DLLs sind halt groß, das ist keine Qt spezialität. Natürlich wäre es wünschens wert wenn QtGUI evtl noch mal aufgespalten wäre, so das einfache Programme nicht sofort 10 Mb am Hals haben.
Andererseits leben wir im Zeitalter von Gigabytes über all, wen kümmern da ein paar MB Dlls?
-
Allerdings war das Programm bisher auch nur knapp 100KB groß und das Beilegen von ~10MB Dll-Dateien ist da einfach unangebracht.
Was ist denn die Alternative? Statisch linken! Dann hast du keine Dlls mehr, dafür aber ne 10,1MB große exe. Wo ist da jetzt der Unterschied? (Außer das du Platz verschwendest sobald auf dem Rechner noch ein zweites Qt-Programm laufen soll)
-
Tyrdal schrieb:
Allerdings war das Programm bisher auch nur knapp 100KB groß und das Beilegen von ~10MB Dll-Dateien ist da einfach unangebracht.
... Außer das du Platz verschwendest sobald auf dem Rechner noch ein zweites Qt-Programm laufen soll
Das tut man unter Windows auch bei Dlls, denn es gibt immer ein Programm im Pfad das andere Qt Dlls verwendet, so dass man auf jeden Fall seine eigenen mitliefern muss.