gpt4 book ai didi

c++ - 将 QPixmaps 拖入 QGraphicsScene : how to avoid 'auto' not allowed in lambda parameter

转载 作者:行者123 更新时间:2023-11-30 04:49:52 27 4
gpt4 key购买 nike

我正在尝试实现自定义 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())
}
);

关于c++ - 将 QPixmaps 拖入 QGraphicsScene : how to avoid 'auto' not allowed in lambda parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com