Item.h:
class Item:public QGraphicsRectItem
{
public:
Item(const QRectF & rect, QGraphicsItem * parent = 0);
void mousePressEvent(QGraphicsSceneMouseEvent * event);
void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
~Item();
};Item.cpp:
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:
#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事件。”现在我已经重新实现了它。为什么不动呢?
发布于 2015-03-03 10:40:03
创建鼠标事件时,将其设置为“接受”。根据设置为项目的标志,实现可能会拒绝它。
在您的示例中,您正在调用默认实现,该实现可能拒绝鼠标按下事件。如果是这样的话,mouseMoveEvent将永远不会被调用。
您应该阅读这关于事件的有趣文章。
发布于 2020-07-02 12:58:10
启用标志以使用这些功能
item ->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
item ->setAcceptHoverEvents(true);
item ->setAcceptedMouseButtons(Qt::LeftButton);https://stackoverflow.com/questions/28828641
复制相似问题