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!
ausgeklügelte Navigation über Eingabemaske (per Pfeiltasten)
ausgeklügelte Navigation über Eingabemaske (per Pfeiltasten)
- Dateianhänge
-
- Eingabemaske mit vom User eingegebenen Ergebnisse
- checkscreen.jpg (49.96 KiB) 1684 mal betrachtet
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);
}