在QTcreator中需要有关事件处理的信息帮助

时间:2011-10-21 04:18:38

标签: qt events qt-creator signals signals-slots

所以基本上我要做的是以下内容: 我想在屏幕上创建一个方向箭头键盘。当用户按下向上或8键时,UI应该像我单击向上按钮一样做出反应。我用Google搜索并搜索了所有内容,但是当我刚开始使用QTCreator(和C ++)时,我非常缺乏经验,任何帮助都会受到赞赏。

到目前为止我已经

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,应用程序按预期退出,但这里是我被困住的部分。

我想要同样的功能,如果我按下向下(或向上键),按钮应该短暂点亮然后拍摄信号给谁知道在哪里

我意识到它应该与connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()))有关;

但不能完全包裹我/发现它。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您可以调用对象上的一个插槽,就好像它是一个普通方法(就C ++而言)。显然你需要让你的pushButton成为一个成员,所以你可以在构造函数之外访问它。

然后是的,只需将按钮的clicked()信号连接到app的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();
  }      
}