Buttons mit status

Alles rund um die Programmierung mit Qt
Antworten
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Buttons mit status

Beitrag von ZSchneidi »

Hi, ich hab vor mir jetzt nen UI zu basteln, dass grafisch etwas "verspielter" daher kommt.

Also Buttons mit Grafiken versehen und all sowas, dabei bin ich zu dem Punkt gekommen, dass ich auch Buttons brauche, die sowas wie einen Status mitbringen.

Ein Beispiel:

Ein "Play" button und auch "pause" sowie "Stop", an sich ein altbekanntes Schema. Ich wollte das ganze nun mit Buttons machen, da ich mit den "Actionen" nicht wirklich weiter kam.
Wie kann ich es jetzt bewerkstelligen, dass ich wenn ich einen Button drücke, sich dessen Status auf "on" setzt.

So dass ich wenn ich einen der anderen Button drücke, dieser status auf "off" zurückgesetzt werden kann.

Die möglichkeit habe ich bei Buttons so noch nicht gesehen, womit könnte ich das kombinieren, oder gibt es evtl. bessere Möglichkeiten.
Ich hatte mit den Buttons angefangen, weil ich die im Designer bequemer handeln konnte als Actionen.

Und noch etwas wäre für mich interessant.
Kann ich die Fläche eines Buttons an der Grafik festlegen ?
Also wenn ich eine Runde Schaltfläche darstelle, die Maus nicht auf die Rechteckige Fläche des Buttons reagiert, sondern nur da wo sich dann tatsächlich das "icon" befindet.
Wäre nett, wenn sich das machen lässt.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Buttons als GUI element sind eigentlich in der QT genau definiert, was die tun. Designtechnisch iss der Begriff "Button" in der QT eher nen "Verhaltensmuster" als nen Control ....
das Verhalten wird mit der klasse "QAbstractButton" eigentlich genau beschrieben.

nen button hat eigentlich nur einen Status mit 2 möglichekeiten, sowie mehreren events ....
mit der checkable funktion muss das aber auch erst mal einschalten.

Wenn du sowas nachbauen willst, wie die Tasten an nem Tape. so dass wenn einen taster drueckst, der andere rausspringt, ist verhaltenstechnisch eine button group naheliegned.

Willst du sowas baun, dass wenn einen button drueckst, Dir der Status immer eins weiter rueckt, sowei sich das Bild aufn button aendert, musst selber was bauen oder anderweitig was finden.

Ich bau mir quasi immer so mehr oder weniger simple statemachines, die durch unter anderem durch QPushButtons visualisiert / bedient werden koennen.

Ciao ...
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Buttons mit status

Beitrag von neuschi »

ZSchneidi hat geschrieben:Hi, ich hab vor mir jetzt nen UI zu basteln, dass grafisch etwas "verspielter" daher kommt.

Also Buttons mit Grafiken versehen und all sowas, dabei bin ich zu dem Punkt gekommen, dass ich auch Buttons brauche, die sowas wie einen Status mitbringen.
Wenn du schon die Beta-Version von Qt 4.6 benutzen kannst/möchstest: Hier gibt es QStateMachine, QState etc. die perfekt für diesen Zweck geeignet sind. Und das Animations-Framework ist auch dabei, für den "verspielteren" Teil ;-) Ansonsten musst du eine derartige Logik halt selbst implementieren.
Und noch etwas wäre für mich interessant.
Kann ich die Fläche eines Buttons an der Grafik festlegen ?
Also wenn ich eine Runde Schaltfläche darstelle, die Maus nicht auf die Rechteckige Fläche des Buttons reagiert, sondern nur da wo sich dann tatsächlich das "icon" befindet.
Wäre nett, wenn sich das machen lässt.
Geht: void QWidget::setMask();

\Ralf
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Hey, nette tips.
Das mit der 4,6er hört sich interessant an, da werd ich mich mal informieren.

Da meine Fähigkeiten noch nicht so ausgereift sind, würde ich es natürlich gern umgehen, mir das komplett selbst zu implementieren.
Falls ich dazu allerdings nichts finde, werd ich das aber in Angriff nehmen. Da kann ich nur bei lernen.

@RHBaum:

Die Tapeversion kommt dem schon sehr nache, ich hatte da auch an sowas wie die Button Group gedacht, da werd ich aber noch etwas lesen müssen, bis ichs verstehe. Das Checkable war schonmal nen gutes stichwort.
Ich habs jetzt zumindest soweit, dass ich den Button drücken kann und er auch solange degrückt bleibt, bis ich nochmal drauf drücke, ich hoffe das lässt sich irgendwie verwenden, dazu muss ich mir das noch im detail anschauen.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Besser wäre es mit style sheets zu arbeiten. Damit befreist du deinen Code von Spielereien mit der Darstellung von deinen Inhalten...
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

Wenn du nur den Status in einem Buttons anzeigen willst dann reagierst du ganz einfach auf das release event.

z.B.:
Wenn Button_1 gedrückt und Lied wird abgespielt dann pausiere das Lied und zeige Play-Icon an.
Wenn Button_1 gedrückt und nichts läuft dann spiele das Lied und zeige Pause-Icon an.

Wenn du jedoch vorhast das mehrere Button miteinander das gleich machen und ihren Status bezogen nicht nur auf ihre Funktion sondern auch auf die anderen Button verändern, dann benutzt du dazu eine <QbuttonGroup>.
In die fügst du alle deine Button hinein.
Wenn nun eine Button betätigt wurde kannst du leicht erfragen welcher und die dazugehörige Icons setzen.
ZSchneidi
Beiträge: 65
Registriert: 16. Juli 2009 13:30

Beitrag von ZSchneidi »

Klingt plausibel, darauf wird es auch hinauslaufen.
Die ButtonGroup wird mir das dann wohl gehandelt kriegen.

Leider bin ich an dem Punkt momentan nur noch nicht angekommen.
Da ich keine phonon apps kompiliert kriege.

Zu dem Thema hab ich aber schon nen Thread aufgemacht.
Antworten