Seite 1 von 1

Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 13. Januar 2013 16:00
von Bitschubser
Hallo Leute,

habe vor Kurzem ein neues Projekt begonnen und bräuchte mal einen kleinen Tip von euch.
Und zwar habe ich eine Anzahl von Datensätzen, welche ich in einem tableWidget anzeige. Die Tabelle ist dreispaltig, die Zeilenanzahl ist offen.
Nun möchte ich seitlich der Tabelle gerne zwei Buttons anordnen (siehe Screenshot), um einen Wert anzuheben oder abzusenken.
Die Buttons müssen also dynamisch erzeugt werden, je nach Anzahl der Datensätze. Die Buttons sollen neben den Spalten stehen - nur wie bekomme ich sie im richtigen Abstand dorthin? Der Weg geht wohl über ein Layout, aber wie geht das, wenn ich die GUI mit dem Designer erstellt habe? Könnte mir bitte mal jemand etwas auf die Sprünge helfen? ;)

Zudem würden mich noch zwei weitere Dinge interessieren (betreffend das tableWidget), vllt. weiß das jemand:
- kann man die Breite einer einzelnen Spalte verändern?
- Kann ich zwischen die Zeilen einen Abstand einfügen, damit die seitlichen Buttons nicht "aneinanderkleben"?

Schonmal vielen Dank, Gruß
Julian

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 16. Januar 2013 16:52
von RHBaum
Generell:
Als User wuerd ich bei deinem Aufbau leicht die Krise Bekommen ...
Am Ende Willst du 2 "Tabellen" bauen, die nur durch die Geometrie eine Beziehung der Zeilen erzeugen. Das find ich verwirrend.

Für up und down moving, wenn es sich um die Position innerhalb einer Tabelle handelt ... ist es eigentlich ueblich ein button fuer up mit "pfeil nach oben" Symbol und einen button fuer down mit "pfeil nach unten" symbol neben die Tabelle zu malen.
Welches element es in der Liste trifft, was nach unten oder oben gemovt wird, entscheidet die "Selection" ...

Wobei mit MAc kenn ich mich ned so aus ... machen die das da anders ?

Und ja Spaltenbreiten kann man manuell veraendern .... "QHeaderview" mal anschauen :-)

Ciao ....

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 16. Januar 2013 20:42
von Bitschubser
Nüchtern betrachtet ist es Murks, da hast Du Recht.
Die Idee mit der Selektion ist nicht schlecht.
Es geht übrigens nicht um up/down moving, sondern um zahlenmäßiges Erhöhen eines Wertes innerhalb der Tabelle, was aber auch besser gelöst ist, so wie Du es vorgeschlagen hast. Das Programm soll "nebenbei" bedient werden können, mit möglichst wenigen Eingaben/Klicks, daher die Idee mit den zwei Buttons pro Datensatz (=1 Klick).
Und ja Spaltenbreiten kann man manuell veraendern .... "QHeaderview" mal anschauen :)
Mist, hast Recht, k.A., wie ich das übersehen konnte...sorry für die dumme Frage... :oops:

Gruß

PS: Unter OS X wird das nicht grundlegend anders gemacht. ;)

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 17. Januar 2013 10:30
von RHBaum
Das Programm soll "nebenbei" bedient werden können, mit möglichst wenigen Eingaben/Klicks, daher die Idee mit den zwei Buttons pro Datensatz (=1 Klick).
Wenn das Dir soviel Wert ist ... um den User deinen Style aufzudruecken, ok ...

Dann wuerd ich aber die Buttons in die "Tabelle" packen ... ja das geht auch.

Dabei gibts 2 Wege.

1. DU nimmst nen Gridlayout und baust das Dynamisch auf, dann isses zwar keine Tabelle, sieht aber notfalls aus wie eine ... :-)
2. Du nimmst ne Tabelle und nen Model, und bei den Spalten mit den Buttons nimmst du QItemDelegates um da Buttons reinzeichnen zu koennen ... die Zellen Editierbar machen und die Events abfangen um drauf reagieren zu koennen ... iss aber ne ziemliche friemelei

Ciao ...

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 17. Januar 2013 12:24
von brax
RHBaum hat geschrieben: 1. DU nimmst nen Gridlayout und baust das Dynamisch auf, dann isses zwar keine Tabelle, sieht aber notfalls aus wie eine ... :-)
2. Du nimmst ne Tabelle und nen Model, und bei den Spalten mit den Buttons nimmst du QItemDelegates um da Buttons reinzeichnen zu koennen ... die Zellen Editierbar machen und die Events abfangen um drauf reagieren zu koennen ... iss aber ne ziemliche friemelei
oder (wie ich finde die einfachste Methode):
3. Du benutzt einfach die Methode setCellWidget von QTableWidget und kannst damit ganz bequem einen QToolButton in eine Tabellenzelle setzen. Am besten mit einem QSignalMapper, damit Du auch weißt, welcher Button geclickt wurde (alternativ kannst Du im verbundenen Slot natürlich auch die aktuelle Cursor Position nehmen und dann rowAt und cellAt von QTableWidget benutzen, aber der SignalMapper ist definitiv schöner).

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Verfasst: 17. Januar 2013 18:54
von Bitschubser
Danke brax, ein super Tip!
Ich werde mir aber jetzt mal überlegen, ob die von RHBaum genannte Methode mit zwei Buttons + Markieren nicht doch die beste Lösung für ein aufgeräumtes Interface ist, und ob der eine Klick zusätzlich wirklich so nachteilig ist. Aber Falls ich doch Buttons pro Zeile mache, dann ist ein in die "Tabelle" integrierter Button definitiv optisch ansprechender, als eine extra Konstruktion per Layout - danke!