gpt4 book ai didi

c++ - 子类化 QGraphicsView,自定义鼠标事件

转载 作者:行者123 更新时间:2023-11-28 03:35:06 24 4
gpt4 key购买 nike

我正在对 QGraphicsView 进行子类化,我想做的是:如果在鼠标移动时按下 MidButton,那么我们就像使用常规 QGraphicsView 操作过程一样,但按下的是左键滑动图像。

我尝试对其进行编码,但它似乎不起作用,我也不知道为什么。

void MyQGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() == Qt::MidButton)
{
QMouseEvent event2(QEvent::MouseMove, event->pos(), Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
QGraphicsView::mouseMoveEvent(&event2);
}
}

如有任何帮助,我们将不胜感激。

编辑:删除了 Anthony 指出的明显错误。

最佳答案

有几个问题。首先,测试条件应该使用testFlags而不是==。其次,您使用 Qt::MidButton 创建事件,它应该是 Qt::LeftButton。最后,您还需要对mousePressEvent 做一个类似的测试(以便QGraphicsView 可以知道发起手部拖动)。

void mousePressEvent(QMouseEvent *event)
{
if (event->buttons().testFlag(Qt::MidButton))
{
QMouseEvent event2(QEvent::MouseButtonPress, event->pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);

// do default behavior as if you pressed the left button
QGraphicsView::mousePressEvent(&event2);
}
else
{
QGraphicsView::mousePressEvent(event);
}
}
void mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons().testFlag(Qt::MidButton))
{
QMouseEvent event2(QEvent::MouseMove, event->pos(), Qt::NoButton, Qt::LeftButton, Qt::NoModifier);

// do default behavior as if you pressed the left button
QGraphicsView::mouseMoveEvent(&event2);
}
else
{
QGraphicsView::mouseMoveEvent(event);
}
}

关于c++ - 子类化 QGraphicsView,自定义鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com