Seite 1 von 1
Buttons mit status
Verfasst: 29. Oktober 2009 12:36
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.
Verfasst: 29. Oktober 2009 14:26
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 ...
Re: Buttons mit status
Verfasst: 29. Oktober 2009 14:45
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
Verfasst: 29. Oktober 2009 15:50
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.
Verfasst: 1. November 2009 20:05
von lepsai
Besser wäre es mit style sheets zu arbeiten. Damit befreist du deinen Code von Spielereien mit der Darstellung von deinen Inhalten...
Verfasst: 3. November 2009 13:31
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.
Verfasst: 3. November 2009 13:46
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.