在QGraphicsScene中拖动QPixmaps:如何避免lambda参数中不允许使用'auto'

时间:2019-03-18 18:01:44

标签: c++ c++11 lambda qgraphicsview qgraphicsscene

我正在尝试实现自定义QGraphicsScene,当我们按向左键时,它允许拖动我使用QDrag并传递项目数据的项目,然后覆盖{ {1}}事件,我得到元素和dropEvent个新父对象。我认为dropEvent可能会比较棘手,因此最好的选择是将其设置为QGraphicsPixmapItem

但是,我收到以下错误parentItem并且不知道为什么

graphicsscene.h

'auto' not allowed in lambda parameter

graphicsscene.cpp

protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event) override;

感谢您对此的任何见识。

1 个答案:

答案 0 :(得分:1)

C ++ 11不支持通用lambda。这意味着您不能使用auto类型的参数。

只需更新到C ++ 14:

QMAKE_CXXFLAGS += -std=c++14

这至少需要GCC 5。

与一般的lambda相比,通用lambda的支持更为棘手,因为它们需要将模板实现为lambda闭包。


如果要使用C ++ 11,则必须直接指定函数参数的类型:

auto val = std::find_if(
    its.constBegin(),
    its.constEnd(),
    [](Item const& it) { // let Item be the 
                         // type of (*its.constBegin())
    }
);