PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt (designer) - erweiterte Toolbar



foobar
05-03-2006, 23:32
ich bin dabei mit dem Qt-designer einen prototypen für eine anwendung zusammenzuklicken und bin dabei auf folgendes problem gestoßen:

ich möchte toolbars mit innerliegenden containern (z.B. TabWidgets) haben wie sie z.B. im Qt-designer selbst auch vorhanden sind
siehe: screenshot (http://ftp.infinityperl.org/artwork/qtdesigner.png) linke und rechte seite
wenn ich sowas im Qt-designer versuche sind die reiter des TabWidgets zwar im bearbeitungsmodus zu sehen aber in der preview verschwinden sie was ich natürlich nicht möchte

gibt es noch ein anderes toolbar-widget das ich dafür brauche oder reicht es einige optionen bzw. codezeilen zu ändern?

eine andere möglichkeit die mir sogar noch besser gefallen würde sieht man in kdevelop:
screenshot (http://www.unixuser.jp/magazine/hot/200404/KDevelop.jpg)
(linker, rechter und unterer rand) wo auch eine art mischung aus TabWidget und toolbar verwendet wird die man aber sogar noch einklappen und die einzelnen tabs zwischen den toolbars verschieben kann

hat vielleicht jemand eine idee wo man dieses widget findet (ohne sich durch den quellcode von kdevelop zu graben)? und wenn ja werden die von Qt zur verfügung gestellt oder ist das eine KDE entwicklung?

danke im vorraus :)

foobar
06-03-2006, 15:23
ok ich hab mitlerweile herausgefunden das man mit hilfe von QDockWindow zumindest toolbars mit innerliegenden containern (die auch funktionieren) erstellen kann :)

allerdings hab ich keine moeglichkeit gefunden das mit dem Qt-designer zu erledigen - geht das ueberhaupt?

auserdem bleibt weiter die frage nach diesen verbesserten toolbars wie man sie z.B. in kdevelop findet...
gibt es vielleicht eine seite mit allen klassen die KDE zu verfuegung stellt aehnlich wie man es in der Qt dokumentation von trolltech findet?

anda_skoa
07-03-2006, 14:08
allerdings hab ich keine moeglichkeit gefunden das mit dem Qt-designer zu erledigen - geht das ueberhaupt?


Nein, ist auch nicht wirklich nötig, weil die QDockWidget ansich ja allgemeine Containerfenster und man die Widgets, die sie beinhalten, ja weiterhin im Designer erstellen kann.

Das linke Dock im Designer ist übrigens eine QToolBox.



auserdem bleibt weiter die frage nach diesen verbesserten toolbars wie man sie z.B. in kdevelop findet...

Die sind aus der Bibliothek KMDI.
Ein Vorgänger davon, also Code aus dem KMDI entstanden ist, ist eine Qt Bibliothek namens QextMDI, davon könnte es noch brauchbare Versionen geben.

Ciao,
_

foobar
08-03-2006, 06:59
Nein, ist auch nicht wirklich nötig, weil die QDockWidget ansich ja allgemeine Containerfenster und man die Widgets, die sie beinhalten, ja weiterhin im Designer erstellen kann.

das stimmt aber man muss ja trotzdem den quellcode anpassen sobald man wirklich ein QDockWindow haben möchte und das würde ich gerne vermeiden
denn sobald ich etwas im designer an meinem projekt bearbeite werden auch meine änderungen im quellcode überschrieben oder?
deshalb würde mich jetzt interessieren ob es dieses QDockWindow vielleicht irgendwo als fertiges custom widget plugin gibt damit ich es auch im designer verwenden kann
ansonsten würde ich versuchen selbst so ein plugin zu erstellen


Das linke Dock im Designer ist übrigens eine QToolBox.

ja aber es liegt ja auch in einem QDockWindow oder?


Die sind aus der Bibliothek KMDI.
Ein Vorgänger davon, also Code aus dem KMDI entstanden ist, ist eine Qt Bibliothek namens QextMDI, davon könnte es noch brauchbare Versionen geben.

zu QextMDI spuckt mir google das hier aus: http://www.geocities.com/gigafalk/qextmdi.htm mal sehen ob ich das verwenden kann
auf jeden fall schon mal danke dafür :)

anda_skoa
08-03-2006, 22:16
das stimmt aber man muss ja trotzdem den quellcode anpassen sobald man wirklich ein QDockWindow haben möchte und das würde ich gerne vermeiden

Das versteh ich jetzt nicht. Wo muß man den Quellcode anpassen?



denn sobald ich etwas im designer an meinem projekt bearbeite werden auch meine änderungen im quellcode überschrieben oder?

Nein, UIC generiert eine Header- und eine Sourcedatei aus dem .ui, welches du ja ohnehin nicht angreifst und jeder weitere UIC Lauf überschreibt nur diese beiden Dateien, keine anderen.



deshalb würde mich jetzt interessieren ob es dieses QDockWindow vielleicht irgendwo als fertiges custom widget plugin gibt damit ich es auch im designer verwenden kann

Unwahscheinlich, da sich da der Aufwand nicht lohnt. Den Inhalt eines DockWindows kann man ja normal im Designer als Widget machen und im Code reicht dann ein setWidget mit einer Instanz davon.

Für diesen einen Aufruf zahlt sich ein Plugins inklusive Template und den damit verbundenen Problemen nicht aus.



ja aber es liegt ja auch in einem QDockWindow oder?

Das war nur als Hinweis gedacht, falls du so eines haben möchtest.

Ciao,
_

foobar
09-03-2006, 15:52
Unwahscheinlich, da sich da der Aufwand nicht lohnt. Den Inhalt eines DockWindows kann man ja normal im Designer als Widget machen und im Code reicht dann ein setWidget mit einer Instanz davon.

ok ich glaube jetzt habe ich verstanden was du meinst
ich soll das Widget das im DockWindow sein soll per designer erstellen aber das zusammenfuegen von beidem dann per hand
hmm das waere eine moeglichkeit aber da es sich erstmal nur um einen prototyp handelt ist mir das auch nicht so recht d.h. ich mache wenn dann alles mit dem designer oder alles per hand
einfach aus dem grund das ich nicht gerne mit generiertem code arbeite...

zwei andere dinge noch:
ich hab aus zweiter hand erfahren das es in Qt4 DockWindows ala KDevelop geben soll... kann das jemand bestaetigen?

kann man mit irgendeiner Qt-version TabWidgets mit mehreren Tab-reihen erstellen so wie man sie z.B. aus vielen windows dialogen kennt?

anda_skoa
09-03-2006, 18:26
ok ich glaube jetzt habe ich verstanden was du meinst
ich soll das Widget das im DockWindow sein soll per designer erstellen aber das zusammenfuegen von beidem dann per hand

Korrekt



hmm das waere eine moeglichkeit aber da es sich erstmal nur um einen prototyp handelt ist mir das auch nicht so recht d.h. ich mache wenn dann alles mit dem designer oder alles per hand
einfach aus dem grund das ich nicht gerne mit generiertem code arbeite...

Wieso solltest du mit dem generierten Code arbeiten?
Wenn man nicht gerade an den Code Internas interessiert ist, kann man die generierten Dateien einfach ignorieren, das .pro Format erlaubt sogar, sie in ein anderes Verzeichnis zu generieren damit sie nicht im Weg sind.


kann man mit irgendeiner Qt-version TabWidgets mit mehreren Tab-reihen erstellen so wie man sie z.B. aus vielen windows dialogen kennt?

Gott sei Dank nicht, das gehört zu den größten Usability Sünden die manche Entwickler je in ihrem Leben verbrochen haben.
Entsprechende Programme findet man auf allen Hall-Of-Shame Seiten, die sich mit UI Design beschäftigen.

Ciao,
_

foobar
10-03-2006, 15:54
Wieso solltest du mit dem generierten Code arbeiten?
Wenn man nicht gerade an den Code Internas interessiert ist, kann man die generierten Dateien einfach ignorieren, das .pro Format erlaubt sogar, sie in ein anderes Verzeichnis zu generieren damit sie nicht im Weg sind.

gut aber aus dem hauptfenster wird ja auch eine .h und eine .cpp generiert
wenn ich das dockwindow nicht direkt da drin instanziere dann brauche ich nochmal eine extra datei wo ich beides zusammenfuehre
nein das wird mir zu kompliziert dann doch lieber alles per hand :)


Gott sei Dank nicht, das gehört zu den größten Usability Sünden die manche Entwickler je in ihrem Leben verbrochen haben.
Entsprechende Programme findet man auf allen Hall-Of-Shame Seiten, die sich mit UI Design beschäftigen.

stimmt besonders gut sind diese mehrreiigen Tabs nicht aber es haette immerhin einen aufruf einer bestimmten funktion mit einem klick ermoeglicht jetzt muss ich mal sehen wie ich das mache evtl. verwende ich icons um bei den reitern platz zu sparen mal sehen...

jetzt bin ich doch noch auf ein problem mit den DockWindows gestossen und zwar nehmen die horizontalen DockWindows immer die gesamte breite des MainWindows ein und die vertikalen bekommen nur den rest
ich haette gerne am rechten rand ein DockWindow das ueber die gesamte fensterhoehe geht genauso wie beim Qt linguist siehe screenshot (http://www.ribbonsoft.com/img/linguist.png)
wie geht das? brauche ich dafuer DockAreas?

anda_skoa
10-03-2006, 21:06
gut aber aus dem hauptfenster wird ja auch eine .h und eine .cpp generiert
wenn ich das dockwindow nicht direkt da drin instanziere dann brauche ich nochmal eine extra datei wo ich beides zusammenfuehre

Hat man normalerweise ja ohnehin, es sei denn man hat den seltenen Fall wo im Mainwindow selbst keinerlei Funktion implementiert werden muß.

Ich zum Beispiel implementiere praktisch immer alle Slots der Menüs im MainWindow, bzw verteile von dort an andere Klassen.



stimmt besonders gut sind diese mehrreiigen Tabs nicht aber es haette immerhin einen aufruf einer bestimmten funktion mit einem klick ermoeglicht jetzt muss ich mal sehen wie ich das mache evtl. verwende ich icons um bei den reitern platz zu sparen mal sehen...

Wenn du so viele Reiter hast, ist vielleicht das Design noch nicht so optimal :)



ich haette gerne am rechten rand ein DockWindow das ueber die gesamte fensterhoehe geht genauso wie beim Qt linguist

Vielleicht eine Frage der Dockreihenfolge. Also könnte klappen wenn du zuerst das Seitendock hinzufügst, dann das horizontale.

Ciao,
_

foobar
12-03-2006, 23:58
Wenn du so viele Reiter hast, ist vielleicht das Design noch nicht so optimal :)

naja es sind nicht sooo viele reiter sie müssen nur auf einem relativ kleinem platz unterkommen...
aber wenn wir schon mal beim thema design sind: hast du vielleicht einen link oder eine buchempfehlung zum thema?


Vielleicht eine Frage der Dockreihenfolge. Also könnte klappen wenn du zuerst das Seitendock hinzufügst, dann das horizontale.

nein das hab ich zuerst auch gedacht aber die reihenfolge des "eindockens" scheint nichts zu ändern
leider finde ich gerade kein "kleineres" beispiel als den Qt linguist sonst würde ich einfach kurz in den quellcode schauen

foobar
15-03-2006, 15:38
so das problem mit dem zu kurzen DockWindow hab ich jetzt mit mehreren DockAreas, Boxen und BoxLayouts geloest

allerdings merke ich jetzt das das was ich mit den icons und dem TabWidget vorhatte (mit hilfe von icons platz bei den reitern zu sparen ) nich so recht klappen will denn obwohl ich nur kleine icons verwende sind die Tabs ausenrum trotzdem noch recht gross
und auch der leerstring den ich als label verwende ist als leere stelle sichtbar

kennt vielleicht jemand einen trick mit hilfe dessen ich den ueberfluessigen platz entfernen kann oder wie ich vielleicht bei einem QTab den innenabstand (margin) verkleinere?

PS: ich weiss ich nerve euch mit immer neuen fragen aber sie gehoeren noch zum gleichen problem deshalb poste ich in den selben thread
und an dieser stelle moechte ich mich schon mal bei anda_skoa fuer die bisherige hilfe bedanken :)