Qt error: reference to type ‘const QVariant‘ could not bind to an rvalue of type ‘...‘

Qt调用setProperty出现上述报错

先来看下Qt帮助文档

bool QObject::setProperty(const char *name, const QVariant &value)
将对象的name属性的值设置为value。
如果使用Q_PROPERTY在类中定义了属性,则成功时返回true,否则返回false。 如果该属性未使用Q_PROPERTY定义,因此未在元对象中列出,则将其作为动态属性添加并返回false。
通过metaObject()和dynamicPropertyNames()提供有关所有可用属性的信息。
可以使用property()再次查询动态属性,并且可以通过将属性值设置为无效的QVariant来将其删除。 更改动态属性的值会导致将QDynamicPropertyChangeEvent发送到对象

说了这么多,发现在调用的cpp文件,包含QVariant的头文件就可以了。(C++隐式转换)

#include <QVariant>

 

抱歉,我的代码有误,应该是 `QCursor(Qt::ClosedHandCursor)` 和 `QCursor(Qt::ArrowCursor)`。 `QCursor` 不能直接绑定到 `Qt::CursorShape` 枚举类型。下面是修正过的代码: ```cpp class MyRectItem : public QGraphicsItem { public: MyRectItem(QGraphicsItem *parent = nullptr) : QGraphicsItem(parent) { setFlags(ItemIsMovable | ItemSendsGeometryChanges); } QRectF boundingRect() const override { return QRectF(-50, -50, 100, 100); } void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override { painter->setBrush(Qt::red); painter->drawRect(boundingRect()); } protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override { if (event->button() == Qt::LeftButton) { m_lastPos = event->pos(); setCursor(QCursor(Qt::ClosedHandCursor)); } } void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override { if (event->buttons() & Qt::LeftButton) { QPointF delta = event->pos() - m_lastPos; m_lastPos = event->pos(); QGraphicsRectItem *guideRect = new QGraphicsRectItem(boundingRect(), this); guideRect->setPen(QPen(Qt::DashLine)); guideRect->setBrush(Qt::NoBrush); guideRect->setPos(pos() + delta); setCursor(QCursor(Qt::ClosedHandCursor)); } } void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override { if (event->button() == Qt::LeftButton) { QGraphicsItem *item = scene()->itemAt(event->scenePos(), QTransform()); if (item && item->parentItem() == this) { setPos(item->pos()); } QList<QGraphicsItem *> itemList = scene()->items(event->scenePos()); for (QGraphicsItem *item : itemList) { if (item->parentItem() == this) { delete item; } } setCursor(QCursor(Qt::ArrowCursor)); } } private: QPointF m_lastPos; }; ``` 感谢您指出我的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子建莫敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值