2011-10-21 43 views
0

所以基本上我想要做的是以下幾點: 我想在屏幕上創建一個方向箭頭鍵盤。當用戶按下向上或8鍵時,UI應該像我點擊向上按鈕一樣作出反應。我已經搜索並搜索了所有內容,但正如我剛開始使用QTCreator(和C++)時那樣,我很缺乏經驗,並且不勝感激。需要幫助事件處理信令在QTcreator

到目前爲止,我有

class GamePadWidget : public QWidget 
    { 
    public: 
     GamePadWidget(QWidget *parent = 0); 

    protected: 
     virtual void keyPressEvent(QKeyEvent *event); 

    }; 
GamePadWidget::GamePadWidget(QWidget *parent) 
    : QWidget(parent) 
{ 

    int buttonWidth = 75; 
    int buttonHeight = 75; 

    QPushButton *down = new QPushButton(("Y-"), this);; 
    down->setGeometry(100, 200, 100, 100); 
    QIcon downicon; 
    downicon.addFile(QString::fromUtf8("C:/arrows/Aiga_downarrow.png"), QSize(),QIcon::Normal, QIcon::Off); 
    down->setIcon(downicon); 
    down->setIconSize(QSize(buttonWidth,buttonHeight)); 
    down->setFocusPolicy(Qt::NoFocus); 

    QPushButton *up = new QPushButton(("Y+"), this);; 
    up->setGeometry(100, 50, 100, 100); 
    QIcon upicon; 
    upicon.addFile(QString::fromUtf8("C:/arrows/Aiga_uparrow.png"), QSize(),QIcon::Normal, QIcon::Off); 
    up->setIcon(upicon); 
    up->setIconSize(QSize(buttonWidth,buttonHeight)); 
    up->setFocusPolicy(Qt::NoFocus); 

} 
void GamePadWidget::keyPressEvent(QKeyEvent *event) 
{ 
    if (event->key() == Qt::Key_8 || event->key() == Qt::Key_Up) { 
     printf("key event in board"); 

    } 

    else if (event->key() == Qt::Key_9 || event->key() == Qt::Key_Down) { 
     qApp->quit(); 

    } 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    GamePadWidget widget; 
    widget.show(); 
    return app.exec(); 
} 

與我當前的代碼,如果我按下去或2,如預期的應用程序退出,但這裏是在我停留在部分。

我想相同的功能,如果我按了向下(或向上鍵),按鈕應該亮起短暫再射斷信號,誰知道在哪裏

我意識到這應該是與連接(退出,SIGNAL(clicked()),qApp,SLOT(quit()));

但不能完全包住我的想法/找到它。

謝謝你的時間。

回答

1

你可以調用一個對象的插槽,就好像它是一個正常的方法(它就C++而言)。 Obv你需要讓你的pushButton成爲一個成員,所以你可以在構造函數之外訪問它。

然後,只需將按鈕的clicked()信號連接到應用程序的quit()插槽即可。下面的代碼應該爲你工作(雖然沒有測試):

GamePadWidget::GamePadWidget(QWidget *parent) 
    : QWidget(parent) 
{ 
    ... 
    mDownButton = new QPushButton(("Y-"), this);; 
    ... 
    connect(mDownButton, SIGNAL(clicked()), qApp, SLOT(quit())); 
} 

void GamePadWidget::keyPressEvent(QKeyEvent *event) 
{ 
    if (event->key() == Qt::Key_Down) { 
    qDebug() << "Down key pressed"; 
    mDownButton.click(); 
    }  
}