[gelöst]qt bei Return Prozedur aufrufen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mampfi
Beiträge: 1976
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

[gelöst]qt bei Return Prozedur aufrufen

Beitrag von mampfi » 05.10.2015 13:21:05

Meine Wenigkeit hat eine Maske

und würde gerne bei Betätigen der Return-Taste eine Prozedur aufrufen

(Bisher muss ich mit der Maus den Suchen-Button betätigen, eigentlich an Position sein müsste)
Zuletzt geändert von mampfi am 06.10.2015 23:07:48, insgesamt 1-mal geändert.
Es gibt viele Foren und eine Welt ausserhalb

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: qt bei Return Prozedur aufrufen

Beitrag von eggy » 05.10.2015 13:36:11

Kurzfassung:
Eventfilter und z.B.

Code: Alles auswählen

void FooBar::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_Return) {
     //mach was
   }
}
die Qt Doku und das Internet wissen mehr, da z.B.
https://wiki.qt.io/How_to_catch_enter_key/de
http://doc.qt.io/qt-5.5/eventsandfilters.html

Ps: hat "die Frage hier stellen" nicht länger gedauert, als mal eben "qt key press" in $Suchmaschine einzugeben?

mampfi
Beiträge: 1976
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: qt bei Return Prozedur aufrufen

Beitrag von mampfi » 05.10.2015 13:43:32

Ich hab nach was anderem gesucht.

Hab ein bißchen trouble beim Einbinden in die "Programmgeografie".

Das foobar wäre dann wohl MainWindow stimmts?
Es gibt viele Foren und eine Welt ausserhalb

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: qt bei Return Prozedur aufrufen

Beitrag von eggy » 05.10.2015 14:02:58

"kommt drauf an" ;)
Jenachdem welches "Objekt" die Tastendrücke verarbeiten soll. Deswegen hatte ich den Eventfilter Abschnitt mit verlinkt, lies das mal in Ruhe (evtl auch mehrfach), dann sollte Dir klarwerden, wie die Sachen zusammenspielen.

Wenn Du ausführlichen Beispielcode brauchst, schau Dir das "Tetrix" Beispiel an.

mampfi
Beiträge: 1976
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: qt bei Return Prozedur aufrufen

Beitrag von mampfi » 06.10.2015 13:01:38

Der kreative Kopf war immer schlecht im Lesen von fremden Quellcodes und dem Finden der richtigen Stelle.

Ausführlichere Erklärung:

Ich hab eine Maske mit den Feldern der Adressverwaltung, die gleichzeitig als Suchmaske dient.

z.B.

lineEdit_nachname
lineEdit_vorname

In "MainWindow::MainWindow(QWidget *parent) ... " werden Buttons mit Prozeduren verknüpft nach der Methode:

connect(ui->pushButton_prev, SIGNAL(clicked()), SLOT(sub_prev() ));
connect(ui->pushButton_next, SIGNAL(clicked()), SLOT(sub_next() ));
connect(ui->pushButton_suchen, SIGNAL(clicked()), SLOT(sub_suchen()));

wo wäre die Routine dann einzubauen?


Die bisher ausprobierten 16 Permutationen haben leider nicht funktioniert. 8O



Aktueller Stand: Beim Test des Kompilats auf dem Hauptrechner wird Return ausgelöst, hab mit dem creator im qdesigner-Menü auf return eingestellt, weiß aber leider nicht mehr wo.
Es gibt viele Foren und eine Welt ausserhalb

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: qt bei Return Prozedur aufrufen

Beitrag von eggy » 06.10.2015 16:05:54

Der kreative Kopf war immer schlecht im Lesen von fremden Quellcodes und dem Finden der richtigen Stelle.
Daran sollte der Kopf dringend was ändern, ab nem gewissen Punkt wirst Du nichts mehr vorgekaut bekommen.
Das Tetrix Beispiel ist ziemlich ausführlich kommentiert, http://doc.qt.io/qt-5/qtwidgets-widgets ... ample.html
Überhaupt sind in der Qt Doku nen paar Beispiele, in denen Dir Zeile für Zeile erklärt wird, warum das da steht. Nimm Dir mal nen Nachmittag um die durchzuarbeiten. Das hilft wirklich die Konzepte zu verstehen.
Die bisher ausprobierten 16 Permutationen haben leider nicht funktioniert. 8O
Den sonstigen Code und die ersten paar Versuche zeigen, dann kann man erklären wo Dein "Denkfehler" sitzt. Wildes rumprobieren wird Dich spätestens wenns etwas komplexer wird nicht mehr zum Ziel führen.

Erstmal gibts zur Zeit zwei Arten die Verbindungen zu setzen, ich mag die alte lieber, die neue hat aber auch ihre Vorteile [1,2].
alte Syntax: QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
neue Syntax: QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);
siehe http://doc.qt.io/qt-4.8/signalsandslots.html und http://doc.qt.io/qt-5.5/signalsandslots.html
Aktueller Stand: Beim Test des Kompilats auf dem Hauptrechner wird Return ausgelöst, hab mit dem creator im qdesigner-Menü auf return eingestellt, weiß aber leider nicht mehr wo.
z.B. rechte Maustaste auf nen Button und "Slot anzeigen" auswählen oder unten in der Mitte im "Signale und Slots"-Tab einstellen


[1] http://woboq.com/blog/how-qt-signals-slots-work.html
[2] http://woboq.com/blog/how-qt-signals-sl ... 2-qt5.html

mampfi
Beiträge: 1976
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: qt bei Return Prozedur aufrufen

Beitrag von mampfi » 06.10.2015 17:44:40

Na ich hab nach dem Durchprobieren meist den vorherigen Zustand wiederherstellt (es wird quasi jede Änderung gesichert).
Somit vermeide ich den Spaghetti-Code. (Ist allerdings trotzdem nervig).


Das Ursprungsprojekt "wie baut man heuzutage Masken" hat ja schon zu einer Anwendung geführt.
Allerdings etwas "ferngesteuert".

"qt-Weiterbildungspause" wäre wirklich mal vonnöten. :oops:
Es gibt viele Foren und eine Welt ausserhalb

mampfi
Beiträge: 1976
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: [gelöst]qt bei Return Prozedur aufrufen

Beitrag von mampfi » 06.10.2015 23:10:00

Problem gelöst.


Alle Befragten bzw. Leser sollen von der Lösung profitieren:

http://www.qtforum.de/forum/viewtopic.p ... 003#p80003



Die von eggy empfohlene Lektüre wird trotzdem nicht verweigert. :D
Herzlichen Dank
Es gibt viele Foren und eine Welt ausserhalb

Antworten