2016-07-27 244 views
1

是否可以创建一个可移动的QGraphicsItem,它是用鼠标右键而不是左键移动的?使QGraphicsItem可以通过鼠标右键而不是左移动

我通过搜索找到的唯一东西是一个线程which suggests using QGraphicsItem::setAcceptedMouseButtons(),我试图将它设置为只接受正确的点击,但随后项目停止了移动。

这是我试过的代码:

QGraphicsScene *scene = new QGraphicsScene(this); 
ui->graphicsView->setScene(scene); 
QGraphicsRectItem *item = scene->addRect(0, 0, 100, 100); 
item->setFlag(QGraphicsItem::ItemIsMovable); 
item->setAcceptedMouseButtons(Qt::RightButton); 
+2

不幸的是,无论传递给setAcceptedMouseButtons的参数如何,'QGraphicsItem :: mouseMoveEvent'中的代码都是硬连接的,只能移动到左边的按钮上。所以,如果你想要移动到右边的按钮,我想你必须重写'mouseMoveEvent'并自己动手。 –

+1

谢谢,这也是我所怀疑的,尽管我不确定。我可能会尝试过滤事件并替换鼠标按钮来欺骗左键单击的对象,同时过滤出实际的左键单击。 – sashoalm

回答

1

我看着源代码,最终,和@ G.M。指出,)的QGraphicsItem的代码:: mouseMoveEvent(明确检查鼠标左键:

void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{ 
    if ((event->buttons() & Qt::LeftButton) && (flags() & ItemIsMovable)) { 

所以没有什么可以重新实现,除了在派生类中移动来完成。

相关问题