Qt fangen gedrückten Taste
denke ich an zu schreiben, primitiven Schlange. ich habe Fenster, wo das Programm die Farben zufällige Linien.
aber ich kann mir nicht denken, wie zu fangen gedrückte Taste zum ändern der Richtung der gemalten Linie.
class QUpdatingPathIte : public QGraphicsPathItem
{
void advance(int phase)
{
if (phase == 0)
return;
int x,y;
int w,a,s,d;
char c;
//
//HOW TO MAKE THIS HERE? (i had done early in console application)
//but i can't do this in GUI , what should i do?
scanf("%c",&c);
if (c=='w')
{ x=-20; y=0; }
else if (c=='s')
{ x=20; y=0; }
else if (c=='a')
{ x=0; y=-20; }
else if(c=='d')
{ x=0; y=20; }
QPainterPath p = path();
p.lineTo(x, y);
setPath(p);
}
};
#include <QtGui/QApplication>
#include "dialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene s;
QGraphicsView v(&s);
QUpdatingPathIte item;
item.setPen(QPen(QColor("black")));
s.addItem(&item);
v.show();
QTimer *timer = new QTimer(&s);
timer->connect(timer, SIGNAL(timeout()), &s, SLOT(advance()));
timer->start(500);
return a.exec();
}
InformationsquelleAutor Tebe | 2011-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
QGraphicsView erbt von QWidget, weil es erbt von QAbstractScrollArea. Sie sollten eine benutzerdefinierte Unterklasse der QGraphicsView und nur die Funktion überschreiben keyPressEvent(). Beispiel:
Dann anstatt eine QGraphicsView-Objekt erstellen Sie einen SnakeView Objekt.
QObject::installEventFilter()
.InformationsquelleAutor CD1212
QGraphicsView reimplements keyPressEvent und leitet Ereignisse an die QGraphicsScene. QGraphicsScene unterstützt drückt durch seine keyPressEvent handler. Standardmäßig ist die QGraphicsScene leitet diese Taste drücken, um die aktuelle QGraphicsItem durch seine keyPressEvent Funktion.
Angesichts der oben genannten, was Sie wahrscheinlich tun möchten, implementieren Sie die
keyPressEvent
handler in IhrerQUpdatingPathItem
:Konnte ich nicht wirklich Folgen, was Sie zu tun versuchten Ihre
advance
Methode, so kann ich nicht bieten viel in der Art der vorgeschlagenen Prozedur.Neben der Umsetzung QObject::installEventFilter, Sie könnten auch Unterklasse alle von QGraphicsView, QGraphicsScene, oder QGraphicsItem und überschreiben Sie die keyPressEvent Funktion.
InformationsquelleAutor Kaleb Pederson
Dank Euch allen. Dann habe ich nicht erreichen, mein Ziel. Doch die Zeit ging weiter und ich habe das gleiche problem und jetzt habe ich es gelöst.
Gibt es Rechte und Wert zu Antworten, aber dann war ich nicht gut genug, um Sie zusammen, denn niemand war voll und ausreichend. Jetzt habe ich es so:
}
}
Nochmals vielen Dank!
ja, du hast Recht
InformationsquelleAutor Tebe
Ihrer Wahl
QGraphicsView
ist nicht sehr glücklich.Grundsätzlich, wenn Sie die Durchführung einiger Sitte gemalt grafische Element (die grafische Umgebung des Spiels ist), sollten Sie erstellen Sie Ihre eigenen widgets und einfach zu implementieren die
QWidget::keyPressEvent()
Methode.InformationsquelleAutor Let_Me_Be