首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用moveBy移动QGraphicsItem

使用moveBy移动QGraphicsItem
EN

Stack Overflow用户
提问于 2015-11-08 01:51:33
回答 1查看 738关注 0票数 0

我尝试通过moveBy()来移动QGraphicsItem "box“。如果我将keyPressEvent放在item类中-这是工作,但如果我把这个函数放在mainwindow类中并尝试通过指针调用moveBy()函数-它不能工作。我做错了什么?

item.h:

代码语言:javascript
复制
#ifndef ITEM_H
#define ITEM_H


#include <QGraphicsItem>
#include <QGraphicsView>
#include <QKeyEvent>
class item: public QGraphicsItem
{
public:
  //virtual void keyPressEvent(QKeyEvent *event);

  item(QGraphicsItem *parent =NULL);
  QRectF boundingRect() const;


  protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);
};

#endif // ITEM_H

mainwindow.h:

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "item.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    item *box;
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    virtual void keyPressEvent(QKeyEvent *event);
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

item.cpp:

代码语言:javascript
复制
#include "item.h"

item::item(QGraphicsItem *parent): QGraphicsItem(parent)
{
    setFlag(QGraphicsItem::ItemIsFocusable);
}

QRectF item::boundingRect() const
{
    return QRectF(0,0,200,200);

}

void item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{

    painter->drawPixmap(1,1, QPixmap(":/Graphics/Untitled.png"));
}

/*
void item::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_Right:
         moveBy(3,0);
         break;


    case Qt::Key_Left:
         moveBy(-3,0);
         break;


    case Qt::Key_Up:
         moveBy(0,-3);
         break;


     case Qt::Key_Down:
          moveBy(0,3);

      break;

  }


}
*/

mainwindow.cpp:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QGraphicsScene"
#include "QGraphicsView"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGraphicsScene *scene = new QGraphicsScene;
    box = new item;
    scene->addItem(box);
    QGraphicsView *view = new QGraphicsView;
    view->setScene(scene);
    view->show();
}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_Right:
         box->moveBy(3,3);
         break;


    case Qt::Key_Left:

         break;


    case Qt::Key_Up:

         break;


     case Qt::Key_Down:


      break;

  }


}
EN

回答 1

Stack Overflow用户

发布于 2015-11-08 18:51:22

当您按下键时,您确定您的程序甚至可以访问MainWindow::keyPressEvent(QKeyEvent *event)吗?尝试调试或将smth放入MainWindow::keyPressEvent(QKeyEvent *event)方法中,就像这样的qDebug() << "mouse key press in mainwindow";

您的小部件需要获取鼠标事件来处理此事件。我很确定这不是在挖老鼠。换句话说,它需要聚焦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33585866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档