2012-02-25 411 views
1

根据QGraphicsView文档,dragMode的行为“只影响不由任何项目处理的鼠标点击。”然后它会说“您可以通过创建QGraphicsView的子类来定义自定义行为。”Qt:如何在QGraphicsView中点击并拖动橡皮筋选择接受鼠标点击的项目?

在我的情况下,我想点击一个接受鼠标点击的项目以正常的方式调用项目的鼠标点击。我希望点击不在这些项目上开始橡皮筋拖动(也是正常的)。但是,我希望能够按住Ctrl键单击视图,并启动橡皮筋拖动选择,而不是调用项目的鼠标事件方法。

我知道如何评估是否CTRL用鼠标点击事件相关联:

if (event->modifiers().testFlag(Qt::ControlModifier)) 

不过,我不知道如何处理这种情况下,或者哪儿把它做。我应该把它放在QGraphicsItem,QGraphicsScene或QGraphicsView? QGraphicsView似乎最有可能,因为文档有点暗示。

回答

2

你需要把条件的QGraphicsItem这样的:

if (event->modifiers().testFlag(Qt::ControlModifier)) 
{event->setAccepted(false); return;} 

现在,你可以在你的QGraphicsView处理该事件。

+0

不久前我问过这个问题,并找到了一个可行的解决方案......基本上,我将QGraphicsView分类并在按住CTRL时手动创建橡皮筋。它工作得很好,但这是一个更优雅的解决方案。谢谢! – Anthony 2012-05-05 22:51:50