• 4048阅读
  • 3回复

[讨论]关于键盘事件按一下以后才执行奇怪现象 [复制链接]

上一主题 下一主题
离线水镜先生
 

只看楼主 倒序阅读 楼主  发表于: 2016-02-22
这是我在QGraiphicsScene中的事件处理函数:在myscence.cpp中
void myscene::keyPressEvent(QKeyEvent *event)
{
        qDebug() << "diaoyong";
        if(event->key()== Qt::Key_Down)
            vect_snake[vect_snake.size() - 1].state = 3;
            //vect_snake[vect_snake.size() - 1].item_snake->moveBy(0,10);
        if(event->key() == Qt::Key_Up)
            vect_snake[vect_snake.size() - 1].state = 2;

        if(event->key() == Qt::Key_Right)
            vect_snake[vect_snake.size() - 1].state = 0;

        if(event->key() == Qt::Key_Left)
            vect_snake[vect_snake.size() - 1].state = 1;

}
我的时间处理函数:
void myscene::timerEvent(QTimerEvent *)
{
    for(int i = 0; i < vect_snake.size();i++)
       {
           switch(vect_snake.at(i).state)
           {

               case 0:
                    vect_snake.at(i).item_snake->moveBy(10,0);
                   break;
               case 1:
                    vect_snake.at(i).item_snake->moveBy(-10,0);
                   break;
               case 2:
                    vect_snake.at(i).item_snake->moveBy(0,-10);
                    break;
               case 3:
                    vect_snake.at(i).item_snake->moveBy(0,10);
                    break;
           }
       }
}
当我用按钮启动计时器时候,
void Widget::on_pushButton_clicked()
{

    current_scene->startTimer(500);
  
},键盘事件在按一下以后,再按才会有响应,但是如果我把current_scene->startTimer(500);放在myscene构造函数中就不会出现此现象,但是按钮就不能触发时间事件了,我想用pushbutton触发时间,然后第一次就响应键盘事件请高手回答!
离线dbzhang800

只看该作者 1楼 发表于: 2016-02-22
现象不奇怪。获取焦点的widget才能接收按键事件。

之前你的焦点在哪个widget上我不知道,但是你点击一下按钮,焦点肯定在你的按钮上了。
离线水镜先生

只看该作者 2楼 发表于: 2016-02-22
回 dbzhang800 的帖子
dbzhang800:现象不奇怪。获取焦点的widget才能接收按键事件。
之前你的焦点在哪个widget上我不知道,但是你点击一下按钮,焦点肯定在你的按钮上了。 (2016-02-22 09:19) 

我就是在Widget里加了一个button和一个graphicsview,然后在graphicsview里添加自己的myscene场景,很简单,
我在void Widget::on_pushButton_clicked()
{

    current_scene->startTimer(500);
    current_scene->setFocus();
  }里设置了场景焦点,因为键盘事件是在场景中触发的,但是还是不行啊,求版主能否详细指点一下!
离线水镜先生

只看该作者 3楼 发表于: 2016-02-22
回 dbzhang800 的帖子
dbzhang800:现象不奇怪。获取焦点的widget才能接收按键事件。
之前你的焦点在哪个widget上我不知道,但是你点击一下按钮,焦点肯定在你的按钮上了。 (2016-02-22 09:19) 

我在void Widget::on_pushButton_clicked()
{

    current_scene->startTimer(500);
    ui->graphicsView->setFocus();
  
}里设置了焦点,问题解决了,非常感谢您的回答!
快速回复
限100 字节
 
上一个 下一个