所以基本上我要做的是以下内容: 我想在屏幕上创建一个方向箭头键盘。当用户按下向上或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()))有关;
但不能完全包裹我/发现它。
感谢您的时间。
答案 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();
}
}