Hunderte Buttons für "MineSweeper"?

Alles rund um die Programmierung mit Qt
Antworten
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Hunderte Buttons für "MineSweeper"?

Beitrag von Rumbert »

Hallo miteinander!

Wie würdet iher vorgehen wenn ihr ein Minesweeper Spielfeld in QT Programmieren wolltet. Meine Idee wäre hierbei z.B. bei einer feldgröße von 30 x 30 dann 900 QPushButtons anzulegen. Aber jeden einzelnen zu connecten und dann däfür slots zu schreiben kann ja nicht der rechte Ansatz sein. Wie könnte man sowas denn effizient realisieren?

Grüße Rumbert
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich sag nur Schleifen, Listen, überladene Klassen
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Beitrag von Rumbert »

Dass ich die Buttons in Schleifen instanziere, positionieren etc ok, aber:
wie erstelle ich mir komfortabel 900 Slots die sowohl im Header deklariert werden und dann im cpp File ausimplementiert werden müssen?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Entweder im Slot nach sender() fragen, evtl. casten nach QPushButton* (k.A. ob dein Slot noch von anderen Sachen aktiviert werden kann als von den Buttons) und dann im GridLayout nach dem Index suchen (QLayout::indexOf(QWidget*)), dann mit QGridLayout::getItemPosition deine Zeile und Spalte rausfischen, damit du auch weißt in welches Feld geclickt wurde.

Alternativ QPushButton überladen, und da immer fleißig row/col speichern, oder nen SIGNAL "clicked(MineButton*)" deklarieren, oderoderoder.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Schau mal in der QT-Doku nach QSignalMapper. Da findest Du sogar ein passendes Beispiel.

Gruß Michael
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Beitrag von Rumbert »

Ha der QSignalMapper ist ja genial, und das Beispiel in der Hilfe ebenso. Wenn man nur immer wüsste wonach man suchen muss ^^

Vielen Dank für Eure Hilfe!

p.s. wie kann mann denn ein [Gelöst] oder so an der Thread Tietel schreiben?
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag von speedy »

p.s. wie kann mann denn ein [Gelöst] oder so an der Thread Tietel schreiben?
Einfach dein ersten Beitrag auf Edit gehen und dann den Titel ändern ;)

Aber zu deinem (gelösten) Problem...
man könnte auch eine Klasse von QPushButton ableiten und einfach noch 2 Variablen z.B. x und y einfügen.
Da dann drin speichern an welcher Position der Button ist.
Dann vielleicht noch ein signal clickxy(int int) was beim drücken ausgelöst wird und somit weißst du in deinem Programm welcher Button grade gedrückt worden ist.

Also so hätte ich das jetzt gemacht. :roll:
Wüste jetzt nicht welcher Ansatz nun besser ist, aber oft gibts ja mehr als nur eine gute Lösung für ein Problem. :wink:
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Das GridLayout nicht vergessen! :)
Antworten