Forum: PC-Programmierung Qt Button gedrückt anderes Pixmap zeichnen


von Mike (Gast)


Lesenswert?

Hallo,

folgendes Problem: Ich habe mir mit Qt eine kleine Oberfläche gebaut, 
auf der mehrere Buttons sind. Nun geht es um die Darstellung des 
Buttons, wenn er gedrückt ist.
Ist ein Button gedrückt, dann wird ein Event ausgelöst. In diesem Event 
setze ich ein Flag und werte es in meiner Applikation aus. Wenn 
flag_button_xy gesetzt, dann zeichne Bild 1, wenn nicht gesetzt, dann 
Bild 2.
Wird der Button losgelassen, dann wird wieder ein Event ausgelöst, indem 
dieses Flag gelöscht wird.

Natürlich funktioniert dieser Ansatz und ist für ein paar Buttons auch 
ok. Jedoch wollte ich mal nachfragen, ob es nicht einen besseren Weg 
gibt, damit ich mir die sämtlichen Flags sparen kann.

Danke für eure Antworten.

Gruß Mike

von Milhouse van Hauten (Gast)


Lesenswert?

Du kannst die Signale benutzten und im Objekt darüber mit einem Slot 
verbinden. Es gibt (abgeleitet von QAbstractButton)die Signale "pressed" 
und "released".
In dem Slot kannst du dann Ändern der Pixmap abstoßen.

von Jean player (Gast)


Lesenswert?

Mike schrieb:
> Ich habe mir mit Qt eine kleine Oberfläche gebaut, auf der mehrere
> Buttons sind

Hi.
Und benutze am besten qbuttongroup.
Dann schreibst nur einen Slot für jeden  Button Signal. Im Slot fragste 
den Button als addresse ab, oder setzt vorher jedem Button eine id, mit 
setid.
Mfg

von Mike (Gast)


Lesenswert?

Ich habs nun einfach über eine Get Funktion gemacht. Das ist schon 
einmal deutlich besser als mit den Flags. Der nächste Versuch wird dann 
wohl in Richtung Slots gehen.
Vielen Danke schon einmal für die Denkanstöße!!!

Gruß Mike

von Milhouse van Hauten (Gast)


Lesenswert?

Für mich klingt es, dass du neu bei Qt bist?
Falls ja mach erstmal ein zwei Übungsaufgaben mit dem Creator und 
Signal/Slots.
Konzeptionel und damit auch von der SW Architektur her ist es ein 
Unterschied, ob du über GetXY(); Methoden ein Pollng realisierst, oder 
ob du es über Signal/Slots löst.

Was ich am Anfang gemacht habe, war einmal (wie es wohl jeder macht), 
eine Oberfläche mit einem Button und einer weiteren Fläche, die ihre 
Farbe wechseln soll, wenn man draufdrückt.

Das zweit war eine Art Uhr. Dazu im Creator eine Ui gebastelt, die nur 
zwei Ziffern besteht.
Von der mit der erzeugten Klasse dann 3 Instanzen anlegen und die so 
nebeneinander darstellen, dass man das Ziffernformat HH:MM:SS hat. Der 
Witz ist dann, die Sekunden Instanz mit einem Timer triggern zu lassen 
und bei Überlauf des MaxWertes die nächst höhere Zahl inkrementieren zu 
lassen. Dem entsprechend muss man die Insnzen über Signale und Slots 
sinnvoll zu verbinden. Außerdem muss die eigenen Signal und Slots 
definieren (kein Hexenwerk)

Wenn man das gemacht hat, hat man das Prinzip ganz gut verstanden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.