首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义QGraphicsRectItem无法接收mouseMoveEvent

自定义QGraphicsRectItem无法接收mouseMoveEvent
EN

Stack Overflow用户
提问于 2015-03-03 09:50:24
回答 2查看 441关注 0票数 0

Item.h:

代码语言:javascript
复制
class Item:public QGraphicsRectItem
{
public:
    Item(const QRectF & rect, QGraphicsItem * parent = 0);
    void mousePressEvent(QGraphicsSceneMouseEvent * event);
    void ​mouseMoveEvent(QGraphicsSceneMouseEvent * event);
    ~Item();
};

Item.cpp:

代码语言:javascript
复制
Item::Item(const QRectF & rect, QGraphicsItem * parent)
    :QGraphicsRectItem(rect, parent)
{
}
void Item::mousePressEvent(QGraphicsSceneMouseEvent * event){
    qDebug("press");
    QGraphicsRectItem::mousePressEvent(event);
    event->accept();
}
void Item::​mouseMoveEvent(QGraphicsSceneMouseEvent * event){
    qDebug("move");
}
Item::~Item()
{
}

main.cpp:

代码语言:javascript
复制
#include "mainwindow.h"
#include <QApplication>
#include "QGraphicsView"
#include "QGraphicsScene"
#include "item.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 //   MainWindow w;
 //   w.show();

    auto item = new Item(QRectF(QPointF(),QSize(100,150)));

    auto scene = new QGraphicsScene;
    scene->addItem(item);

    auto view = new QGraphicsView(scene);
    view->setMinimumSize(QSize(800,600));
    view->scene()->setSceneRect(QRectF(QPointF(),view->size()));
    view->show();

    return a.exec();
}

我读过关于QGraphicsItem::​mousePressEvent的文档,其中说:“如果您确实重新实现了这个函数,事件默认将被接受(请参阅QEvent::accept()),然后这个项目就是鼠标抓取器。这允许项目接收未来的移动、释放和doubleclick事件。”现在我已经重新实现了它。为什么不动呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-03 10:40:03

创建鼠标事件时,将其设置为“接受”。根据设置为项目的标志,实现可能会拒绝它。

在您的示例中,您正在调用默认实现,该实现可能拒绝鼠标按下事件。如果是这样的话,mouseMoveEvent将永远不会被调用。

您应该阅读关于事件的有趣文章。

票数 2
EN

Stack Overflow用户

发布于 2020-07-02 12:58:10

启用标志以使用这些功能

代码语言:javascript
复制
item ->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
item ->setAcceptHoverEvents(true);
item ->setAcceptedMouseButtons(Qt::LeftButton);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28828641

复制
相关文章

相似问题

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