在 QGraphicsScene 中拖动 QPixmaps:如何避免 lambda 参数中不允许 'auto'
Dragging QPixmaps inside QGraphicsScene: how to avoid 'auto' not allowed in lambda parameter
我正在尝试实现一个自定义 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 不支持通用 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())
}
);
我正在尝试实现一个自定义 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 不支持通用 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())
}
);