2017-04-05 47 views
1

如何將我的主GUI窗口中的enterPressed()事件連接到特定按鈕(也在主GUI中)?將QMainWindow中的enterPressed()連接到Button單擊()

USECASE:

用戶啓動應用程序,輸入一些數據,然後按Enter鍵,將被忽略的「開始」按鈕被點擊。

我的想法:

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

class ClassA : QMainWindow 
{ 
    Q_OBJECT 
    // ... 

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

你確定你需要一個'QMainWindow'爲您的使用情況? 'QDialog'有[默認按鈕](https://doc.qt.io/qt-5/qdialog.html#default-button),我認爲'QDialog's更適合用戶輸入一些數據並按下Return鍵。那麼,在這裏使用'QMainWindow'有什麼理由嗎? – Mike

+0

@Mike它是應用程序的主窗口 – leon22

回答

1

可以信號連接至其他信號:

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

,就是這樣。該信號被髮送到QPushButton的實例信號發出它,因此無論連接到它什麼都將被調用。此外(請您談一下事件)在QMainWindow::keyPressEvent你重新實現:

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

問題是:QMainWindow沒有成員「returnPressed」 – leon22

+0

@ leon22添加了你所需要的完整代碼。 – Resurrection

+0

錯誤:「插槽需要比信號提供更多的參數」,我認爲你有一個錯字:returnedPressed vs returnPressed – leon22