Buttons dynamisch entlang eines "tableWidget" anordnen

Alles rund um die Programmierung mit Qt
Antworten
Bitschubser
Beiträge: 8
Registriert: 5. Januar 2013 18:03

Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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
Dateianhänge
Bildschirmfoto 2013-01-13 um 15.49.31.png
Bildschirmfoto 2013-01-13 um 15.49.31.png (24.58 KiB) 4724 mal betrachtet
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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 ....
Bitschubser
Beiträge: 8
Registriert: 5. Januar 2013 18:03

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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. ;)
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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 ...
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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).
Bitschubser
Beiträge: 8
Registriert: 5. Januar 2013 18:03

Re: Buttons dynamisch entlang eines "tableWidget" anordnen

Beitrag 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!
Antworten