需要有关 QTcreator 中信号事件处理的帮助
Posted
技术标签:
【中文标题】需要有关 QTcreator 中信号事件处理的帮助【英文标题】:Need help on Event handling to signalling in QTcreator 【发布时间】:2011-10-21 04:18:38 【问题描述】:所以基本上我想做的是以下几点: 我想在屏幕上创建一个方向箭头垫。当用户按下 up 或 8 键时,UI 应该做出反应,就像我点击了 up 按钮一样。我已经用谷歌搜索了所有内容,但是由于我刚开始使用 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】:您可以像调用普通方法一样调用对象上的槽(就 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();
【讨论】:
以上是关于需要有关 QTcreator 中信号事件处理的帮助的主要内容,如果未能解决你的问题,请参考以下文章
Linux进程间通信 -- 信号集函数 sigemptyset()sigprocmask()sigpending()sigsuspend()