[Hilfe] Vector ausgabe langsamer?
-
Hallo Community,
Ich bin neu hier, ein ziemlicher newbie in c++ und fühle mich schlecht direkt mit einer frage zu kommen
Ich würde gerne ein Programm schreiben was mir die X, Y Position der maus abspeichern und wiedergeben kann.
zuerst habe ich eine klasse erstellt:class myVec_class{ public: int x; int y; }; extern vector<myVec_class> Vec; extern vector<myVec_class>::iterator VecIt;
mit einen vector habe ich so die positionen eingefügt.
vec.x = xPos; vec.y = yPos; myVec.push_back(vec);
funktioniert auch recht gut (xPos, yPos hole ich von GetCursorPos() und um das zu verlangsamen hab ich einen Counter eingefügt).
Beim ausführen jedoch daher es ein vector ist und ich hoffentlich jetzt nicht falsch liege kann man den nur in einem loop auslesen und deswegen habe ich das so gemacht:
vector<myVec_class> Vec; vector<myVec_class>::iterator VecIt; for (VecIt = Vec.begin(); VecIt != Vec.end(); VecIt++) { xPos = VecIt->yPos; yPos = VecIt->yPos; ui.textBrowser->append("xPos : " + QString::number(xPos) + "--yPos : " + QString::number(yPos)); }
Jetzt schreibt er mir alle x, y positionen aufeinmal hin und ich würde gerne alle 0,5 sek einen aufruf machen. gibt es eine andere funktion um den vector langsamer auszulesen?
das ganze muss leider von 0 - zum letzten eintrag nach der reihe gezählt werden und mit einen counter stop ich paar zeilen bzw mit einen sleep freez ich das ganze programm und dann setzt er trotzdem so schnell fortwäre nett hier eine antwort zu finden ^^ zerbreche mir seit 3 tagen den kopf.
lg Godric
-
Da du QT verwendest, benutze einen Timer (QTimer), um jeweils das nächste Element aus dem Vector zu holen und auszugeben.
-
danke für deine antwort. ich habe das direkt probiert und aufnahme geht auch gut aber bei der ausgabe ladet er das immer noch zu schnell. muss ich den loop entfernen? aber wie kann ich dann den vector auslesen^^
mfg godric
-
Ja die Schleife muß weg - benutze eine Indexvariable (als Klassenmember) und greife über diesen in der Timer-Funktion auf den Vector zu (und danach um 1 erhöhen ;-).
-
ich versteh nicht ganz wie du das meinst, ich habe eine klasse mit integers:
class myVec_class{ public: int x; int y; };
mit .push_back fülle ich die variablen. um jetzt aber die x werte zu bekommen muss ich ja:
int xPos = VecIt->x;
machen oder nicht? weil das funktioniert ja nur im loop somit verstehe ich nicht wie ich das in der timerfunktion ausführen soll^^ sorry wie schon gesagt bin noch neu ^^
-
Statt mit einem Iterator kannst du auch mit einem Index auf die einzelnen Vector-Elemente zugreifen:
if (index < Vec.size()) { xPos = Vec[index].yPos; yPos = Vec[index].yPos; index++; // Ausgabe... }
Und 'index' als Klassenmember anlegen und mit 0 initialisieren.
-
ok danke ich habs jetzt momentan mit arrays geschafft aber werde es dann mit vector auch ausprobieren.
kann geclosed werden