需要有关 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 中信号事件处理的帮助的主要内容,如果未能解决你的问题,请参考以下文章

在 QtCreator 中构建失败时发出声音信号

求数字信号处理有关车牌识别的MATLAB代码

qt界面不动,但是响应事件

Linux进程间通信 -- 信号集函数 sigemptyset()sigprocmask()sigpending()sigsuspend()

Linux(程序设计):58---epoll复用技术实现统一处理信号事件源

linux 多线程信号处理总结