2017-04-05 1 views
1

Wie kann ich ein key enterPressed() Event in meinem Haupt-GUI-Fenster mit einer bestimmten Schaltfläche verbinden (auch in der Haupt-GUI)?Connect enterPressed() in QMainWindow to Button clicked()

Usecase:

Benutzer startet die Anwendung, einige Daten eingeben und die Enter-Taste drücken und auf ein „Start“ umgangen werden Schaltfläche geklickt wird.

Meine Idee:

connect(this, SIGNAL(returnPressed()), ui.btn_Start, SLOT(clicked())); 

class ClassA : QMainWindow 
{ 
    Q_OBJECT 
    // ... 

    private: 
     Ui::ClassAClass ui; 
    // ... 
}; 
+0

Sind Sie sicher, dass Sie eine 'QMainWindow' für Ihren Anwendungsfall benötigen ?? "QDialogs haben [Standardschaltflächen] (https://doc.qt.io/qt-5/qdialog.html#default-button), und ich denke, dass' QDialog's besser für einen Benutzer geeignet sind, der einige Daten eingibt und drücke Return. Also, gibt es einen Grund, 'QMainWindow' hier zu verwenden? – Mike

+0

@Mike es ist das Hauptfenster der Anwendung – leon22

Antwort

1

Sie können auf andere Signale Signale verbinden:

connect(this, &MainWindow::returnPressed, ui.btn_Start, &QPushButton::released); 

Und das ist es. Das Signal wird an das Instanzsignal QPushButton weitergeleitet, das es aussendet, so dass alles, was damit verbunden ist, aufgerufen wird. Zusätzlich (sprechen Sie über Veranstaltungen) in QMainWindow::keyPressEvent Sie neu implementieren:

class MainWindow : public QMainWindow 
{ 
//... 
signals: 
    void returnPressed() const; 

protected: 
    void keyPressEvent(QKeyEvent *event); 
}; 

void MainWindow::keyReleaseEvent(QKeyEvent *event) 
{ 
    if(event->key() == Qt::Key_Return) 
     emit returnPressed(); 
    QMainWindow::keyReleaseEvent(event); 
} 
+0

Das Problem ist: QMainWindow hat kein Mitglied "returnPressed" – leon22

+0

@ leon22 Hinzugefügt den vollständigen Code von was Sie brauchen. – Resurrection

+0

Fehler: "Der Steckplatz erfordert mehr Argumente als das Signal bietet" und ich denke, Sie haben einen Tippfehler: returnedPressed vs returnPressed – leon22