ausgeklügelte Navigation über Eingabemaske (per Pfeiltasten)

Alles rund um die Programmierung mit Qt
Antworten
lx2
Beiträge: 75
Registriert: 5. Mai 2009 03:13

ausgeklügelte Navigation über Eingabemaske (per Pfeiltasten)

Beitrag von lx2 »

Hi Forum,

schaut euch bitte als erstes das Attachment an.

Ihr könnt dort ein Fenster mit lauter QWidgets (die je ein QLineEdit und ein QPushButton enthalten) erkennen.

In jedes Feld soll eine Zahl eingegeben werden. Da das ganze ein Trainingsprogramm ist, soll dies so schnell wie möglich passieren.

Momentan kann ich mit der "Tab"-Taste ein Feld weiter und mit "Umschalt-Tab" ein Feld zurück schalten. Das ist aber sehr unpraktisch wenn man zum Schluss erkennt, dass man einen Fehler gemacht hat. Viel besser wäre eine navigation mit den Pfeiltasten.

Folgende Probleme stellen sich:

1. Wenn ich die Pfeiltaste drücke wird im aktuellen QLineEdit navigiert, wie schaff ich es, dass sozusagen der Listener eine Stufe höher auf die Pfeiltasten reagiert

2. Da die Eingabemaske nicht statisch ist und immer verschiedene Anzahl von QWidgets generiert, ist es extrem schwierig alle "Nachbarn" eines QWidgets abzuspeichern. Ich hatte mir gedacht, dass jedes QWidget sich merkt wer sein linker,oberer,rechter bzw. unterer Nachbar ist und dann ein setActive mit den Pfeiltasten ausgeführt wird. Ist ein QWidget z.B. an einer rechten Kante, ist sein rechter Nachbar dann der ganz linke in dieser Zeile. Kann man das irgendwie einfacher machen???

3. Wenn ein Feld ausgefüllt wird soll danach sofort zum nächsten geswitcht werden

4. Navigiert man mit den Pfeiltasten soll der aktuelle feld immer komplett markiert sein, damit man es sofort mit der korrektur ersetzt wird


Bin für jeden Hinweis dankbar!
Dateianhänge
Eingabemaske mit vom User eingegebenen Ergebnisse
Eingabemaske mit vom User eingegebenen Ergebnisse
checkscreen.jpg (49.96 KiB) 1690 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

eventFilter verwenden und keyReleaseEvent abfangen

Welches Layout wird verwendet? Da läßt sich doch sicher feststellen, wo man ist, und wer die Nachbarn sind.

Zur Selektion sag ich gar nichts, da hat die Doku bestimmt was passendes.
lx2
Beiträge: 75
Registriert: 5. Mai 2009 03:13

Beitrag von lx2 »

In vereinfachter Form ist der Code für das Layout folgender:

Code: Alles auswählen

QVBoxLayout* vbox = new QVBoxLayout(this);
int tempcount = 0;

for(int i = 0 ; i < 13 ; i++){

	QHBoxLayout* hbox  = new QHBoxLayout();
	
		for(int j=0; j<30; j++){

				//eine Resultbox erstellen und in ein Array abspeichern
				Resultbox* inputBox = new Resultbox(this);
				resultBoxes[tempcount]=inputBox;
				hbox->addWidget(inputBox);
				inputBox->show();

				tempcount++;
		}
		
	vbox->addLayout(hbox);
}
Antworten