【发布时间】:2019-03-18 18:01:44
【问题描述】:
我正在尝试实现自定义QGraphicsScene,当我们按下左键时,它允许拖动一个项目,为此我使用QDrag 并传递项目数据,然后我覆盖dropEvent 事件,其中我得到元素和dropEvent 新父母。我认为 QGraphicsPixmapItem 在另一个项目之上可能会很棘手,所以最好的选择是将其设置为 parentItem。
但是,我收到以下错误 'auto' not allowed in lambda parameter 并且不知道确切原因
graphicsscene.h
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
graphicsscene.cpp
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
auto its = items(QRectF(event->scenePos() - QPointF(1,1), QSize(3,3)));
auto val = std::find_if(its.constBegin(), its.constEnd(), [](auto const& it){ // <-- ERROR HERE
return it->type() > QGraphicsItem::UserType;
});
if(val == its.constEnd())
return;
if(event->button() == Qt::RightButton){
showContextMenu(event->scenePos());
}
else{
createDrag(event->scenePos(), event->widget(), *val);
}
}
感谢您对此的任何见解。
【问题讨论】:
-
你仅限于 C++11 吗?
-
您好 Guillaume Racicot,您是什么意思?在我的 .pro 文件中,我有这个
QMAKE_CXXFLAGS += -std=gnu++11 -
我的意思是,你能更新到 C++14 吗?
-
感谢工作:)!你能解释一下为什么吗?
标签: c++ c++11 lambda qgraphicsview qgraphicsscene