• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Spiele Port auf KDE4/QT4

Hallo, habe ein kleines Problem und bitte einen QT4 Guru um Hilfe.

Bin dabei ein Würfelspiel auf KDE4/QT4 zu portieren. In diesem Spiel wird mit Mausklick und der Leertaste gewürfelt. Die Leertaste wird unter anderen von QPushButton belegt.

Mit Qt3 ist die Lösung recht einfach:
QAccel *acc = new QAccel(this);
acc->connectItem(acc->insertItem(Qt::Key_Space), this, SLOT(keyWurf()));

Eine QT4Lösung wäre:
Einbinden des QT3supports und
Q3Accel *acc = new Q3Accel(this);
acc->connectItem(acc->insertItem(Qt::Key_Space), this, SLOT(keyWurf()));

Finde diese Lösung als Schönheitsfehler.

Ich vermute die Lösung in QAction, mein Englisch reicht nicht diese zu finden.

Bedanke mich für Ihre Hilfe und wünsche einen guten Tag.
 

spoensche

Moderator
Teammitglied
Harry Wirbel schrieb:
Eine QT4Lösung wäre:
Einbinden des QT3supports und
Q3Accel *acc = new Q3Accel(this);
acc->connectItem(acc->insertItem(Qt::Key_Space), this, SLOT(keyWurf()));

Finde diese Lösung als Schönheitsfehler.

Wenn du das Spiel nach Qt4 portieren willst, warum verwendest du dann weiterhin Qt3, statt die Buttons, Actions, etc. von Qt4??? So macht eine Portierung meiner Meinung nach wenig Sinn.
[/quote]
 
OP
H

Harry Wirbel

Newbie
spoensche hat geschrieben:
Wenn du das Spiel nach Qt4 portieren willst, warum verwendest du dann weiterhin Qt3,
statt die Buttons, Actions, etc. von Qt4??? So macht eine Portierung meiner Meinung nach
wenig Sinn.

Um mein Posting kurz zu halten, habe ich wohl ein wenig Verwirrung gestiftet.

Irgendwann Ende 2009 kam ich auf die Idee, ein allgemein bekanntes Würfelspiel (MÄDN)für meine
Enkelkinder zu programmieren. Von C und C++ keine Ahnung musste erst einmal die Grundlage dafür
geschaffen werden. Also ran an den Speck, ein paar Bücher besorgt und los ging das Programmieren.
Irgendwann Mitte 2010 lief das Spiel, umgesetzt in OBJ C++ und KDE3/QT3. Da KDE3/QT3 wohl ein
Auslaufmodell wird oder ist, habe ich beschlossen das Spiel nach KDE4/QT4 zu portieren. Bis jetzt
sind alle Funktionen portiert außer dieser Sache mit der Leertaste, die eingebaut wurde, um das
Würfeln mit mehr als einem Spieler zu erleichtern.

QPushButton: Auszug aus dem Original der QT4 Doku.

A push button emits the signal clicked() when it is activated by the mouse, the Spacebar or by a
keyboard shortcut. Connect to this signal to perform the button's action. Push buttons also provide
less commonly used signals, for example, pressed() and released().

Daraus entnehme ich, das die Leertaste von QPushButton belegt wird. Nun suche ich eine Möglichkeit
die Leertaste zum Würfeln aus QPushButton herauszubekommen.

Nach einbinden des QT3Supports ist folgendes Konstrukt möglich.

// Leertaste zum würfeln freigeben
Q3Accel *acc = new Q3Accel(this);
acc->connectItem(acc->insertItem(Qt::Key_Space), this, SLOT(keyWurf()));


Möchte eine reine QT4 Lösung verwenden, mein Englisch reicht dafür nicht. Bin für jeden Tipp dankbar,
der hilft eine Lösung zu finden. Sind noch Unklarheiten bezüglich des Programms oder Interesse vorhanden,
bin ich gerne bereit Auszüge oder den Quelltext des Programms zur Verfügung zu stellen.

Vielen Dank, und einen schönen Tag.
 

Tooltime

Advanced Hacker
Schau dir mal QShortcut an, wenn ich das noch richtig im Hinterkopf habe sind QPushButton's die Knöpfe in den Dialogen, welche man auch per Tastatur aktivieren kann. Die berühmtesten Vertreter sind wohl der OK- und Abbrechen-Button
 
OP
H

Harry Wirbel

Newbie
Tooltime schrieb:
Schau dir mal QShortcut an, wenn ich das noch richtig im Hinterkopf habe sind QPushButton's die Knöpfe in den Dialogen, welche man auch per Tastatur aktivieren kann. Die berühmtesten Vertreter sind wohl der OK- und Abbrechen-Button

Vielen Dank für den Tip.

Die Lösung:

// Leertaste zum würfeln freigeben
QShortcut *cut = new QShortcut(this);
cut->setKey(Qt::Key_Space);
cut->setEnabled(true);
connect(cut, SIGNAL(activated()), SLOT(keyWurf()));
 
Oben